Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does effect does a trailing number have on the body of an awk script?

Tags:

text

unix

awk

I have a simple awk one liner that folds the next line onto the current line when a given pattern is matched. Here it is:

awk '/two/ { printf $1; next; } 1' test.txt 

with the following input:

one
two
three
four
five
six

one
two
three 
four

you get:

one
twothree
four
five
six

one
twothree 
four

Note that the "three" is folded up with the "two" which is what I wanted to occur. I found this solution (don't remember where) and thought it odd that the trailing '1' appeared to be the missing piece that resulted in the desired effect. If you take it out, you get:

awk '/two/ { printf $1; next; }' test.txt 
twotwo

As the result. So my question is, what does the trailing '1' do, and where is it documented?

Thanks!

like image 643
Damon Snyder Avatar asked Oct 23 '12 20:10

Damon Snyder


People also ask

What does 1 mean in awk?

AWK works on method of condition and then action. So if any condition is TRUE any action which we mention to happen will be executed then. In case of 1 it means we are making that condition TRUE and in this case we are not mentioning any action to happen, so awk's by default action print will happen.

What does \t do in awk?

Hang on and follow with me so you get the flavor of AWK. The characters "\t" Indicates a tab character so the output lines up on even boundries. The "$8" and "$3" have a meaning similar to a shell script. Instead of the eighth and third argument, they mean the eighth and third field of the input line.

How do you use awk with a pipe?

The system function allows the user to execute operating system commands and then return to the awk program. The system function executes the command given by the string command. It returns, as its value, the status returned by the command that was executed. Save this answer.


2 Answers

For awk, 1 mean true, and when an expression is true, awk print the current line by default.

Examples :

  • awk '1' /etc/passwd will print the whole file
  • awk '0' /etc/passwd will not print the whole file

If you're good in arithmetic (or you have imagination or programming skills), there's many tricks you can do with this behaviour.

like image 52
Gilles Quenot Avatar answered Sep 21 '22 01:09

Gilles Quenot


"The '1' at the end of whole Awk one-liner prints out the modified line (it's syntactic sugar for just "print" (that itself is syntactic sugar for "print $0"))".

-- catonmat

like image 21
blueberryfields Avatar answered Sep 20 '22 01:09

blueberryfields