Why does
echo foo bar..baz bork | awk \'BEGIN{RS=\"..\"} {gsub(OFS,\"\\t\");}1\'
seem to do the same thing as
echo foo bar..baz
I really dislike these types of shortcuts because it obfuscates and misleads how it's being parsed. Like you said,
awk 'BEGIN{RS=".."} {gsub(OFS,"\t");}1'
seems to be equivalent to
awk 'BEGIN{RS=".."} {gsub(OFS,"\t");} {print;}'
which would seem to imply that 1
is simply an alias for {print}
. But that's not the case at all. 1
is not associated with the previous bracket. It is actually part of a second statement, which has no action
, so it uses a default action
of {print}
. You can think of it like this instead.
awk 'BEGIN{RS=".."} {gsub(OFS,"\t")}; 1!=0 {print}'
Here's an example that I think demonstrates better the condition {action}
format that awk
uses:
echo 'a b c' | awk '1 {print $1}; 2 {print $2}; 0 {print $3}'
a
and b
are printed because 1
and 2
are nonzero and evaluate to true
. c
is not printed because 0
evaluates to false
.