Parsing output


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Parsing output
# 1  
Old 08-15-2008
Parsing output

I need to parse the following out put and determine if the USB is a DISK and whether or not it's External.

If an HBA line contains "USB" then does the next line contain
"DISK" and "External".

0:0,31,0: HBA : (aacraid,1) AAC SCSI
0,0,0: DISK : Adaptec ASR4800SAS Volu0001
0,1,0: DISK : Adaptec ASR4800SAS Volu0001
2:0,2,0: HBA : (ide,2) Generic IDE/ATAPI
0,0,0: DISK : TANDBERGRDX 0031
4:0,7,0: HBA : (usb_msto,1) USB USB HBA
0,0,0: TAPE : HP C1537A XU5A
5:0,7,0: HBA : (usb_msto,2) USB USB HBA #< If this line has "usb"
0,0,0: DISK : WD 5000KS External 107a #< 'This External' ?
6:0,2,0: HBA : (ide,1) Generic IDE/ATAPI
0,0,0: CDROM : PIONEER BD-ROM BDC-202 1.01


Thanks
# 2  
Old 08-15-2008
Code:
awk '$0 ~ /DISK .* External/ {printf("%s\n%s\n", prev, $0)} 1 {prev=$0}' file

# 3  
Old 08-15-2008
So if I under stand, if $0 matches then it will print $0 and the previous line. Correct?

How could I test if $0 matches DISK .* External and previous match USB then print?

Thanks for your help, much appreciated.
# 4  
Old 08-15-2008
Quote:
Originally Posted by lochraven
So if I under stand, if $0 matches then it will print $0 and the previous line. Correct?

How could I test if $0 matches DISK .* External and previous match USB then print?

Thanks for your help, much appreciated.
Should it match "USB" or "usb" or does the case not matter??
Code:
awk '$0 ~ /DISK .* External/ && tolower(prev) ~ /usb/ {printf("%s\n%s\n", prev, $0)} 1 {prev=$0}' file

# 5  
Old 08-15-2008
Excellent, that does it short and sweet. I don't think case matters but it doesn't hurt to make it lower.

I'm trying to get use to the shorter awk statements, mine are always so lengthy.

I'm trying to understand how the 'prev' is working or which portion of the statement actually is pointing to the previous line. Is that something built into awk?

Thanks again
# 6  
Old 08-15-2008
Quote:
Originally Posted by lochraven
I'm trying to understand how the 'prev' is working or which portion of the statement actually is pointing to the previous line. Is that something built into awk?

Thanks again
The script has two parts to it...one part saves every line in the variable "prev"
Code:
1 {prev=$0}

The other part prints the previous "prev" and current "$0" lines if the logical AND of two conditions listed below is true.
Check whether the current line aka "$0" contains the keywords "DISK" and "External" AND (&&) if the previous line aka "prev" contains the keyword "USB"
Code:
/DISK .* External/ && tolower(prev) ~ /usb/ {printf("%s\n%s\n", prev, $0)}

# 7  
Old 08-15-2008
Ok ok, I got it now. I think my brain is a little slow today...being Friday and all Smilie

Thanks for the explaination, once again much appreciated.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Parsing nsupdate's output

Anybody that's ever used nsupdate knows that it's error management is not very good. I have a wrapper script that when it's got all the information it needs launches the nsupdate command. This is my attempt at parsing the output to help support users quickly know if the command succeded or... (7 Replies)
Discussion started by: maverick72
7 Replies

2. Shell Programming and Scripting

Parsing of TOP output

Hi , i am trying to set up an alert, when CPU usage (0.2%us in below output) is more than 40% top | head | grep '^Cpu' Cpu(s): 0.2%us, 0.2%sy, 0.0%ni, 99.1%id, 0.6%wa, 0.0%hi, 0.0%si, 0.0%st using CUT, i pulled the value 0.2 and assigned to CPU (variable) CPU=$(expr `top | head -10... (5 Replies)
Discussion started by: Prateek007
5 Replies

3. Shell Programming and Scripting

Parsing Output of a Variable

i have a log file that contains something similar to this: one two three four five six seven eight nine ten eleven twelve thirteen fourteen one two three four five six seven eight nine ten eleven twelve thirteen fourteen one two three four five six seven eight nine ten eleven twelve... (3 Replies)
Discussion started by: SkySmart
3 Replies

4. Shell Programming and Scripting

parsing output

Can somebody provide a solution to parse the following; cat /tmp/xxx Name: QUE_REQU (o.mtaseast-o.dmart) (MTPost queue) Number of messages: 66446 (Age 686 min; Size 214 mb) Backlog (messages): 0 (Age 0 min) Name: QUE_REQU... (6 Replies)
Discussion started by: BeefStu
6 Replies

5. Shell Programming and Scripting

Parsing the output from top

Guys can you help me fix this parse error. Here's my script. #!/bin/bash # Set up limit below NOTIFY="6.0% us 6.1% us 6.2% us 6.3% us 6.5% us 6.6% us 6.7% us 6.8% us 6.9% us 7.0% us" # CPU Usage every minute TOP="$(top -b -n2 -d 00.20 |grep Cpu|tail -1 | awk -F ":" '{ print $2 }' | cut... (3 Replies)
Discussion started by: redtred
3 Replies

6. Shell Programming and Scripting

Parsing the date output

Hi fellows, I need to define a notification for SSL certificate expiration. My Command output is below: (this is the "Expiration Date") Tue Mar 15 09:30:01 2012 So, at 15th Feb (1 month before the expiration), a notification has to be triggered by a script or sth else. How can i set an... (5 Replies)
Discussion started by: oduth
5 Replies

7. Shell Programming and Scripting

parsing ifconfig output

I'm trying to gather information on the interfaces on a large number of servers. If I run ifconfig I will get: eth0 Link encap:Ethernet HWaddr 00:50:56:A2:27:C1 inet addr:10.145.xxx.xxx Bcast:10.152.45.255 Mask:255.255.254.0 ----- eth1 Link... (2 Replies)
Discussion started by: C0ppert0p
2 Replies

8. Shell Programming and Scripting

parsing output of system()

Hi, From the above output of df command I need to parse only 43G (available space) and display it. root@localhost:> df -h /vol1/joy Filesystem Size Used Avail Capacity Mounted on /vol1/joy 180G 137G 43G 76% ... (3 Replies)
Discussion started by: cjjoy
3 Replies

9. Shell Programming and Scripting

parsing output

I have a file that contains the output of the ls -iR command, something like this: ./results: 2504641011 result_1410 2500957642 result_525 2504641012 result_1425 2500957643 result_540 ./tests/1: 2500788755 1 2500788743 1000 ./tests/2: 2500788759 3 2500788758 999 ... (6 Replies)
Discussion started by: looza
6 Replies

10. Shell Programming and Scripting

parsing output from ls command

I have to test the directory name which is obtained from for dir in `ls -l|grep $9 ' i need to check whether it is directory ( if yes, I have to check the first 3 character fo the directory how can I do that? Please help me thanks (3 Replies)
Discussion started by: ajaya
3 Replies
Login or Register to Ask a Question