Parsing OSX UNIX command results which print in multiple lines


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing OSX UNIX command results which print in multiple lines
# 1  
Old 12-01-2015
Question Parsing OSX UNIX command results which print in multiple lines

from the CLI on a Mac, if you type
Code:
networksetup -listallnetworkservices

then you get results in a multi-line paragraph that look something like this:

Code:
networksetup -listallnetworkservices
An asterisk (*) denotes that a network service is disabled.
Wi-Fi
Display Ethernet
Bluetooth DUN
Thunderbolt Ethernet
Display FireWire
Bluetooth PAN
Thunderbolt Bridge

I need to capture each of the network services reported and add that to either a variable or an array.

Problem #1 is that first sentence. I don't wish to capture it but DO wish to capture everything else.

Problem #2 is that cut -d, cut -c and awk '{ print $x }' are all failing because they only appear to scan results form the first line, not the others that follow.

Not sure if this is a job for sed or perl, but not super good with either of those commands and their syntax. Open to yer thoughts, oh wise ones.

Yours Truly,
The Mac Dweeb
# 2  
Old 12-01-2015
Not sure I understand. You say awk doesn't recognize lines? What's the awk record separator you're using? What's the result of
Code:
networksetup -listallnetworkservices | awk '{print NR, NF}'

This User Gave Thanks to RudiC For This Post:
# 3  
Old 12-01-2015
Code:
networksetup -listallnetworkservices | awk 'NR>1'


Last edited by Aia; 12-01-2015 at 05:43 PM.. Reason: Corrected a mistype from NF>1 to NR>1
This User Gave Thanks to Aia For This Post:
# 4  
Old 12-01-2015
@RudiC - I'm not familiar with either NF or NR. I'm using something like
Code:
networksetup -listallnetworkservices | awk '{print $11-$20}'

and it's returning a lot of zeros. Your example only returns numbers as well:

1 10
2 1
3 2
4 2
5 1
6 1
7 2

I'm looking for the alphanumeric results but at least we now know the bnumber of spaces as delimiters.... Smilie

@Aia - Your code DID return alphanumeric, but omitted the line items with no spaces in their name like "Wi-Fi" or "Ethernet".

---------- Post updated at 01:19 PM ---------- Previous update was at 01:06 PM ----------

Houston: we found a solution.

Code:
networksetup -listallnetworkservices | awk 'NR>1'
Wi-Fi
Display Ethernet
Bluetooth DUN
Thunderbolt Ethernet
Display FireWire
Bluetooth PAN
Thunderbolt Bridge

Thank you both for your help!

Last edited by hungryd; 12-01-2015 at 05:16 PM..
# 5  
Old 12-01-2015
Sorry I meant NR>1 and somehow I interpolated an F instead of a R.
NF means Number of Fields
NR means Number of Records (normally lines)
Glad you found the same solution. I corrected it in the previous post.
# 6  
Old 12-01-2015
Appreciate the follow up. The issue now is a bit more devious: setting an array with these values doesn't know how to break up the resulting text! Perhaps another problem for another thread, perhaps not.

Here's the original code:
Code:
networksetup -listallnetworkservices | awk 'NR>1'
Wi-Fi
Display Ethernet
Bluetooth DUN
Thunderbolt Ethernet
Display FireWire
Bluetooth PAN
Thunderbolt Bridge

Now, if I set a variable and then print those results to that variable, I get a series of words that aren't parsed by LINE. First, the variable:
Code:
services=`networksetup -listallnetworkservices | awk 'NR>1'`

Then showing the results:
Code:
echo $services
Wi-Fi Display Ethernet Bluetooth DUN Thunderbolt Ethernet Display FireWire Bluetooth PAN Thunderbolt Bridge

All those spaces essentially defeat the initial reason I needed this list in the first place! I need individual entries for each line, added into the array: Wi-Fi, Display Ethernet, Bluetooth DUN, Thunderbolt Ethernet, etc.

Meh.
# 7  
Old 12-01-2015
If your shell supports it:
Code:
IFS=$'\n' device=($(networksetup -listallnetworkservices | awk 'NR>1'))

Now you can access each elements of the array:

Code:
for d in ${device[@]}; do echo "$d"; done
Bluetooth DUN
Thunderbolt Ethernet
Display Ethernet
Display FireWire
Wi-Fi
Bluetooth PAN
Thunderbolt Bridge

How many elements?
Code:
echo ${#device[@]}
7

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

String parsing help across multiple UNIX platforms

Need to parse XML like strings from a file. Using `egrep -A 1 "Panel Temp" "$2" | tail -2` I get the following string: <parameter name="Panel Temp" unit="0.1 C"> <value size="1" starttime="06-08-2017 09:36:56.968">95</value> I want to output: {"Panel Temp" 9.5 C} The 9.5 C is the value... (16 Replies)
Discussion started by: harleyvrodred
16 Replies

2. Shell Programming and Scripting

How to print different multiple lines after two patterns?

Hello, I need to print some lines as explained below, TXT example 1111 2222 3333 4444 5555 6666 7777 8888 6666 9999 1111 2222 3333 4444 5555 (8 Replies)
Discussion started by: liuzhencc
8 Replies

3. Shell Programming and Scripting

Print multiple lines on one line

Hi All, I have a file looks like: rst:singh:99.0.20-X86 2 rst:ACSI_SIN_SERVICES rst:singh:99.0.20-X86 2 rst:ACSI_BISI want to wrap 3rd col in one line and add variable value at start and ending of line and I wrote command: cat file | awk '{print $3}' | xargs > command.txt sed -e... (1 Reply)
Discussion started by: rakeshtomar82
1 Replies

4. Shell Programming and Scripting

Print the first line for each multiple lines

Hi all, i need help to extract each first line from multiple lines occurrences based on different patterns (name) starting from the fourth lines like follows:- // header 1 header 2 header 3 // no acc name score rank //... (2 Replies)
Discussion started by: redse171
2 Replies

5. UNIX for Dummies Questions & Answers

How to print results from two lines using awk?

I need to print a specific string from an html file that's always occurring between two other known strings. Example: from the text below, I would like to print the bolded part: <this is a lot of text before the string I want to print> fullpath: abc/def/ghi/example.xlf -cfver. <sample text... (15 Replies)
Discussion started by: danegon
15 Replies

6. Shell Programming and Scripting

Multiple command execution inside awk command during xml parsing

below is the output xml string from some other command and i will be parsing it using awk cat /tmp/alerts.xml <Alert id="10102" name="APP-DS-ds_ha-140018-componentFailure-S" alertDefinitionId="13982" resourceId="11427" ctime="1359453507621" fixed="false" reason="If Event/Log Level(ANY) and... (2 Replies)
Discussion started by: vivek d r
2 Replies

7. Shell Programming and Scripting

print first few lines, then apply regex on a specific column to print results.

abc.dat tty cpu tin tout us sy wt id 0 0 7 3 19 71 extended device statistics r/s w/s kr/s kw/s wait actv wsvc_t asvc_t %w %b device 0.0 133.2 0.0 682.9 0.0 1.0 0.0 7.2 0 79 c1t0d0 0.2 180.4 0.1 5471.2 3.0 2.8 16.4 15.6 15 52 aaaaaa1-xx I want to skip first 5 line... (4 Replies)
Discussion started by: kchinnam
4 Replies

8. Shell Programming and Scripting

Logfile parsing with variable, multiple criterias among multiple lines

Hi all I've been working on a bash script parsing through debug/trace files and extracting all lines that relate to some search string. So far, it works pretty well. However, I am challenged by one requirement that is still open. What I want to do: 1) parse through a file and identify all... (3 Replies)
Discussion started by: reminder
3 Replies

9. Shell Programming and Scripting

print multiple lines using the grep command.

Hi All, Please find my piece of code below. I am trying to grep the word SUCCESS from $LOGFILE and storing in the grepvar variable. And i am placing that variable in a file. Now if i open the file, i can see the four lines but not in seperate four line s but in a paragraph. If am mailing that log... (8 Replies)
Discussion started by: intiraju
8 Replies

10. Shell Programming and Scripting

(sed) parsing insert statement column that crosses multiple lines

I have a file with a set of insert statements some of which have a single column value that crosses multiple lines causing the statement to fail in sql*plue. Can someone help me with a sed script to replace the new lines with chr(10)? here is an example: insert into mytable(id, field1, field2)... (3 Replies)
Discussion started by: jjordan
3 Replies
Login or Register to Ask a Question