What does this awk scripts do?
I found this in a embedded in a Makefile:
awk '/@/{print " \"" $$_ "\\n\"" }' file
I know the prototype of awk is:
awk 'pattern {action}' file
But what does @
and $$_
mean?开发者_如何转开发
It looks like the underscore character is simply a variable in this case. And since it is not initialized, it has the value of zero. Thus, $_
is equivalent to $0
, which refers to the entire line that was processed. I think that it could also have been written $x
since x would be an uninitialized variable.
Since it appears in a makefile, two dollar signs are needed (it is a special character in a makefile) to produce a single dollar sign in the command.
And as already mentioned by Nemo, the @
is simply the pattern. Any line containing @
would be matched.
OK that is weird. It appears to have the same effect as:
awk '/@/{print " \"" $_ "\\n\"" }' file
And also the same effect as:
awk '/@/{print " \"" $0 "\\n\"" }' file
That is, it takes any line of the form foo@bar
and converts it to "foo@bar\n"
(with two leading spaces). Lines without an @
get dropped because they do not match the pattern.
But I have never seen the double-dollar sign, nor the use of $_
as a synonym, nor can I find them documented anywhere...
精彩评论