Print certain lines based on condition


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Print certain lines based on condition
# 1  
Old 08-15-2013
Print certain lines based on condition

Hi All,
I have following listing

Code:
[172.29.38.40]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.31   93    63080    43 /usr

[172.29.38.41]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on

[172.29.38.42]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on

[172.29.38.43]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/appvglv05     14.00      0.59   96      316     1 /OUTBOUND

[172.29.38.45]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.29   93    63070    44 /usr
/dev/hd3          10.00      0.90   91    24577    10 /tmp


As you can see I use the script to capture those filesystem more than 90% and output to a logfile. But I just want those only server that exceeded to display out. Pls share thanks.

Last edited by Don Cragun; 08-15-2013 at 11:41 PM.. Reason: Add CODE tags.
# 2  
Old 08-16-2013
The following awk script seems to do what you want:
Code:
awk '
function printlist(     i) {
        for(i = 1; i <= c; i++)
                printf("%s\n", l[i])
        print "" 
}
/^[[]/ {if(c > 2) printlist()
        c = 0 
}
/./ {   l[++c] = $0
}
END {   if(c > 2) printlist()
}' listing

If you are running this on a Solaris/SunOS system, use /usr/xpg4/bin/awk, /usr/xpg6/bin/awk, or nawk instead of awk.

With your sample input, this produces the following output:
Code:
[172.29.38.40]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.31   93    63080    43 /usr

[172.29.38.43]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/appvglv05     14.00      0.59   96      316     1 /OUTBOUND

[172.29.38.45]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.29   93    63070    44 /usr
/dev/hd3          10.00      0.90   91    24577    10 /tmp

# 3  
Old 08-16-2013
awesome. Very powerful awk script command. Thanks for your sharing.

---------- Post updated at 02:39 AM ---------- Previous update was at 12:51 AM ----------

Thanks Don for your kind sharing. Btw, can you explain a bit on the highlighted part that I not understand.

Code:
awk '
function printlist(     i) {
        for(i = 1; i <= c; i++)
                printf("%s\n", l[i])
        print "" 
}
/^[[]/ {if(c > 2) printlist()   <<= if found first character is [ and c > 2 initialize the var c
        c = 0 
}
/./ {   l[++c] = $0              <<= can elaborate more on this?
}
END {   if(c > 2) printlist()   
}' listing

Thank You Very Much.
# 4  
Old 08-16-2013
Alternatively:
Code:
awk 'NF>10' RS= ORS='\n\n' file

# 5  
Old 08-16-2013
Hi Scrutinizer, the script you posted it print out all rows. The one Don did, yes I had tested it is working. Thanks.
# 6  
Old 08-16-2013
It works fine for me. Again it show the power of record selector.

Code:
awk 'NF>10' RS= ORS='\n\n' file
[172.29.38.40]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.31   93    63080    43 /usr

[172.29.38.43]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/appvglv05     14.00      0.59   96      316     1 /OUTBOUND

[172.29.38.45]
Filesystem    GB blocks      Free Used    Iused Iused Mounted on
/dev/hd2           4.00      0.29   93    63070    44 /usr
/dev/hd3          10.00      0.90   91    24577    10 /tmp

@ckwan
What is your output of:
Code:
awk '{$1=$1}1' RS= ORS='\n\n' file

# 7  
Old 08-16-2013
@ckwan
My suggestion would only work if the format is like in your sample (10 fields in the header) and if there are no additional space characters on empty lines (i.e. two consecutive newlines), which is usually the case with output from utilities. If that is not the case then a solution like Don's would work more reliably...
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

awk to reformat lines based on condition

The awk below uses the tab-delimeted fileand reformats each line based on one of three conditions (rules). The 3 rules are for deletion (lines in blue), snv (line in red), and insertion (lines in green). I have included all possible combinations of lines from my actual data, which is very large.... (0 Replies)
Discussion started by: cmccabe
0 Replies

2. Shell Programming and Scripting

Print lines based on line number and specified condition

Hi, I have a file like below. 1,2,3,4,5,6,7,8,9I would like to print or copied to a file based of line count in perl If I gave a condition 1 to 3 then it should iterate over above file and print 1 to 3 and then again 1 to 3 etc. output should be 1,2,3 4,5,6 7,8,9 (10 Replies)
Discussion started by: Anjan1
10 Replies

3. Shell Programming and Scripting

Delete lines from file based on condition

I want to keep last 2 days data from a file and want to delete others data from the file. Please help me. Sample Input # cat messages-2 Apr 15 11:25:03 test1 kernel: imklog 4.6.2, log source = /proc/kmsg started. Apr 15 11:25:03 test1 rsyslogd: (re)start Apr 16 19:42:03 test1 kernel:... (2 Replies)
Discussion started by: makauser
2 Replies

4. Shell Programming and Scripting

Print every 5 lines with special condition

Hi Friends, I have an input file like this chr1 100 200 chr1 200 300 chr1 300 400 chr1 400 500 chr1 500 600 chr1 600 700 chr1 700 800 chr1 800 900 chr1 900 920 chr1 940 960 I would like to get the first line's second column and the fifth line's 3rd column as one single line. This... (13 Replies)
Discussion started by: jacobs.smith
13 Replies

5. Shell Programming and Scripting

Deleting lines based on a condition for a group of files

hi i have a set of similar files. i want to delete lines until certain pattern appears in those files. for a single file the following command can be used but i want to do it for all the files at a time since the number is in thousands. awk '/PATTERN/{i++}i' file (6 Replies)
Discussion started by: anurupa777
6 Replies

6. Shell Programming and Scripting

extracting lines based on condition and copy to another file

hi i have an input file that contains some thing like this aaa acc aa abc1 1232 aaa abc2.... poo awq aa abc1 aaa aaa abc2 bbb bcc bb abc1 3214 bbb abc3.... bab bbc bz abc1 3214 bbb abc3.... vvv ssa as abc1 o09 aaa abc4.... azx aaq aa abc1 900 aqq abc19.... aaa aa aaaa abc1 899 aa... (8 Replies)
Discussion started by: anurupa777
8 Replies

7. Shell Programming and Scripting

compare 2 files and return unique lines in each file (based on condition)

hi my problem is little complicated one. i have 2 files which appear like this file 1 abbsss:aa:22:34:as akl abc 1234 mkilll:as:ss:23:qs asc abc 0987 mlopii:cd:wq:24:as asd abc 7866 file2 lkoaa:as:24:32:sa alk abc 3245 lkmo:as:34:43:qs qsa abc 0987 kloia:ds:45:56:sa acq abc 7805 i... (5 Replies)
Discussion started by: anurupa777
5 Replies

8. Shell Programming and Scripting

Remove lines from XML based on condition

Hi, I need to remove some lines from an XML file is the value within a tag is empty. Imagine this scenario, <acd><acdID>2</acdID><logon></logon></acd> <acd><acdID></acdID><logon></logon></acd> <acd><acdID></acdID><logon></logon></acd> <acd><acdID></acdID><logon></logon></acd> I... (3 Replies)
Discussion started by: giles.cardew
3 Replies

9. Shell Programming and Scripting

awk to print lines based on string match on another line and condition

Hi folks, I have a text file that I need to parse, and I cant figure it out. The source is a report breaking down softwares from various companies with some basic info about them (see source snippet below). Ultimately what I want is an excel sheet with only Adobe and Microsoft software name and... (5 Replies)
Discussion started by: rowie718
5 Replies

10. Shell Programming and Scripting

Filter the column and print the result based on condition

Hi all This is my output of the some SQL Query TABLESPACE_NAME FILE_NAME TOTALSPACE FREESPACE USEDSPACE Free ------------------------- ------------------------------------------------------- ---------- --------- ---------... (2 Replies)
Discussion started by: jhon
2 Replies
Login or Register to Ask a Question