Understanding awk


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Understanding awk
# 1  
Old 06-13-2014
Understanding awk

I found this on an awk site and would like to know what it does:

Code:
/CARS/{x="";next} {if(x)print x;x=$0} END{if(x)print x}'

Does it mean if it finds the word cars it skips that line and then prints the next one?
# 2  
Old 06-13-2014
Each line that contains CARS is skipped. It'll display x once it comes across a line without CARS, yes. In the end it prints all the lines without CARS, but lagging behind a line (thus the need for the END statement to catch up).

equivalent and quicker: awk '!/CARS/'
This User Gave Thanks to neutronscott For This Post:
# 3  
Old 06-13-2014
Not quite, it also skips the line above the line with the match and it also skips empty lines..
# 4  
Old 06-13-2014
How awk basically works:

Any awk program has 3 parts, all of which are optional:

Code:
awk '
BEGIN {
      ...
}

{
      ...
}

END   {
      ...
}' /path/to/inputfile

The program part marked "BEGIN" is executed before the first line is read. The part marked "END" is executed after the last line is read. The (unnamed) part in the middle is executed for every line of the input file.

Most times the part in the middle consists of rules which specify a certain pattern of lines along with one or more actions specifying what to do with these. Such a rule could be:

Code:
/^ABC/ {
        number++;
        }

This means: whenever a line starts with "ABC" ("^" means "line start") increment a variable named "number". Put in the END-part a statement printing this variable and you have a counter for a certain sort of lines (before you ask: yes, "grep -c" would do the same).

I suggest Dale Doughertys "sed & awk" from O'Reilly if i managed to peak your interest.

I hope this helps.

bakunin
# 5  
Old 06-13-2014
Quote:
Originally Posted by neutronscott
Each line that contains CARS is skipped. It'll display x once it comes across a line without CARS, yes. In the end it prints all the lines without CARS, but lagging behind a line (thus the need for the END statement to catch up).

equivalent and quicker: awk '!/CARS/'
That's not correct.
Have the following test file:
Code:
line 1
line 2
line 3
CARS
line 5

0
line 8
line 9

You'll see that it skips NULL lines (e.g. line 6 being empty and line 7 being zero).
Also, it does a delayed print: prints the value from the previous line.
When it meets CARS it "NULLs" the saved line (x="") and skips the current line (next).
In the END section the last line is printed (because it was only stored yet).
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Understanding awk 'expansion'

Heyas Recently i wanted to help someone with an awk script, but the end-script didnt work as expected. He wanted, if HOME was empty, to get the HOME of the current USER from /etc/passwd. At first i tried hardcoded with root: awk -F: '/^root/ {print $6}' /etc/passwd As that worked, i've... (4 Replies)
Discussion started by: sea
4 Replies

2. Shell Programming and Scripting

awk : Need Help in Understanding a command

Hello I am working on a Change request and Stuck at a point. The below awk command is used in the function. float_test ( ) { echo | awk 'END { exit ( !( '"$1"')); }' } I understand that awk 'END' is used to add one line at the end and exit is used to end the script with an error... (4 Replies)
Discussion started by: rahul2662
4 Replies

3. Shell Programming and Scripting

Help in Understanding awk if ( F ) syntax -

Hi Experts, I was looking at the below link, for finding words next to it, And unable to understand this syntax: Can any one please explain , what is meaning of this code: if ( F ) s = s ? s OFS $i : $i from:... (4 Replies)
Discussion started by: rveri
4 Replies

4. Shell Programming and Scripting

Need your help in understanding this

Hi, I found this in a script and I would like to know how this works Code is here: # var1=PART1_PART2 # var2=${var1##*_} # echo $var2 PART2 I'm wondering how ##* makes the Shell to understand to pick up the last value from the given. (2 Replies)
Discussion started by: sathyaonnuix
2 Replies

5. Shell Programming and Scripting

Help in understanding awk expression

Hi, Could somebody help me in understanding the following awk expression: awk -v n="POINT" '/%/{print $0 "\n" n ;next}1' < file name Thanks, Arun (6 Replies)
Discussion started by: arun_maffy
6 Replies

6. UNIX for Dummies Questions & Answers

Understanding / Modifying AWK command

Hey all, So I have an AWK command here awk '{if(FNR==NR) {arr++;next} if($0 in arr) { arr--; if (arr == 0) delete arr;next}{print $0 >"list2output.csv"}} END {for(i in arr){print i >"list1output.csv"}}' list1 list2 (refer to image for a more readable format) This code was submitted... (1 Reply)
Discussion started by: Aussiemick
1 Replies

7. UNIX for Advanced & Expert Users

understanding awk in this script

i am analyzing a query written by another developer ,need to understand part of script am looking at a code ..and it converts comma files to pipe delimited and also takes away quotes from any columns, source field format: 2510,"Debbie",NewYork changes to target: 2510|Debbie|NewYork ... (1 Reply)
Discussion started by: coolrock
1 Replies

8. UNIX for Dummies Questions & Answers

understanding part of an awk script

Hi I have an awk script running in ksh in which a section of code is picking out the datetime as follows: dia=`echo $starttime | nawk '{ printf "%02d\n", substr($1,9,2)}'` mes=`echo $starttime | nawk '{ printf "%02d\n", substr($1,6,2)}'` ano=`echo $starttime | nawk '{ printf "%02d\n",... (3 Replies)
Discussion started by: shajju
3 Replies

9. Shell Programming and Scripting

Understanding Awk and Cat

Hi Guys, I was recently come across some code to hopefully learn a little bit about putting Shell commands into PHP application to run on a Linux server. However, I don't understand the command AT ALL... and was wondering if anyone can interpret it: cat userIDs.dat | awk '{s=s+1; if... (1 Reply)
Discussion started by: jordRiot
1 Replies

10. Shell Programming and Scripting

Need help on understanding the Shell and AWK scripts

Hello Friends, I am new to the scripting & have to analyze bunch of regular production scripts. It has .ksh which calls on the .awk script having many functions I need to understand and debug the scripts ASAP Can anybody please let me know as how can I debug, I want to see the flow of code... (3 Replies)
Discussion started by: amberj123
3 Replies
Login or Register to Ask a Question