Visit Our UNIX and Linux User Community


Print certain lines based on condition


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Print certain lines based on condition
# 8  
Old 08-16-2013
Yes this is working. I guess the RS=[space], without space it will have not print out correctly. Thanks everyone for your sharing. Thanks Scrutinizer.

---------- Post updated at 04:50 AM ---------- Previous update was at 04:32 AM ----------

Hi Guys, any idea which site I can find information about the adv awk script I can pick up ?
# 9  
Old 08-16-2013
Hi ckwan,
Here is a version of the script with comments added. Let me know if something is still not clear.
Code:
awk '
# Define a function named printlist()
function printlist(     i) { # It has a local variable (i).
        for(i = 1; i <= c; i++) # For every line in the array l[], 
                printf("%s\n", l[i]) # print that line.
        print "" # Then print an empty line as a separator.
}
# If the 1st character on a line is '[',
/^[[]/ {if(c > 2) printlist() # if we have more than two lines saved, print the saved lines.
        c = 0 # Clear the number of saved lines no matter how many lines were saved before.
}
# If the input line is not empty,
/./ {   l[++c] = $0 # increment the number of saved lines (c) and save the current line.
}
# When we hit end-of-file,
END {   if(c > 2) printlist()  # if we have more than two lines saved, print the saved lines.
}' listing # Our input file is named "listing"

For any Linux or UNIX system utility, you should be able to find out how it works by issuing the command:
Code:
man 1 utility_name

If that doesn't work for you, try looking at the "Man Pages" section of this forum. The POSIX section gives you the (hopefully) portable subset of options for a utility that should work on most systems. For awk, that would be the POSIX awk utility description.

I avoided the simpler solution (suggested by Scrutinizer and Jotne) using RS= because although setting the input record separator to an empty string works on some implementations of awk; it is not portable. The standards only specify the behavior of an awk program if RS is defined to be a single character other than the NULL character.
# 10  
Old 08-16-2013
Quote:
Originally Posted by Don Cragun
[..] I avoided the simpler solution (suggested by Scrutinizer and Jotne) using RS= because although setting the input record separator to an empty string works on some implementations of awk; it is not portable. The standards only specify the behavior of an awk program if RS is defined to be a single character other than the NULL character.
Hi Don,

I don't think that is correct:

Quote:
RS
The first character of the string value of RS shall be the input record separator; a <newline> by default. If RS contains more than one character, the results are unspecified. If RS is null, then records are separated by sequences consisting of a <newline> plus one or more blank lines, leading or trailing blank lines shall not result in empty records at the beginning or end of the input, and a <newline> shall always be a field separator, no matter what the value of FS is.
awk: Variables and Special Variables
This User Gave Thanks to Scrutinizer For This Post:
# 11  
Old 08-16-2013
Quote:
Originally Posted by Scrutinizer
Hi Don,

I don't think that is correct:

awk: Variables and Special Variables
Thanks Scrutinizer,
I stand corrected. The behavior is defined when RS is an empty string.

The behavior is unspecified when FS is an empty string. (And, it is fairly common to find scripts in these forums that assume that FS= will make every character on a line be a separate field. I confused this issue with FS when I was talking about RS. I obviously need to get some sleep.)

Last edited by Don Cragun; 08-16-2013 at 08:21 AM.. Reason: fix typo
# 12  
Old 08-16-2013
Thanks for spending time for resolving the issue. All inputs are very appreciated. Thanks again.

Previous Thread | Next Thread
Test Your Knowledge in Computers #765
Difficulty: Medium
Cache read misses from an instruction cache generally cause the longest delays because the processor, and in particular the thread of execution, has to wait until the instruction is fetched from main memory.
True or False?

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

Featured Tech Videos