awk help

Andreas Perstinger andipersti at
Mon Apr 17 16:09:02 UTC 2017

On 2017-04-17 16:11, Ernie Luzar wrote:
> When I first tested /^Address/ and /^ Hits/ produced no output. I
> changed them to /Address/ and /Hits/ and this produced output. I
> could not find any reference to the ^ sign, so I would like to know 
> what is it suppose to do?

"^" inside a regular expression is an anchor and matches the beginning
of the line. (See "man re_format" or e.g. ). In the example
you've posted, the lines containing "Address" and "Hits" are indented
which means there are spaces/tabs between the beginning of the line and
these words. Thus the patterns don't match.

> I am not having success using the system commands rm & touch as shown
> in the following example.
> awk 'BEGIN { "date +%Y%m%d" | getline date hits_yes =
> "/etc/ipf_pool_awk_hits_yes" hits_no = "/etc/ipf_pool_awk_hits_no" rm
> hits_yes rm hits_no "touch hits_yes" "touch hits_no" }'   $hits_rpt

You need to use the built-in function "system" in order to use system
commands, e.g.

system("rm " hits_yes)

This concatenates the literal string "rm " with the content of the awk
variable "hits_yes" which results in the string "rm
/etc/ipf_pool_awk_hits_yes" and this command is then executed.

> I know the date system command is working, but can't figure out how
> to code rm & touch to get them to work. Is this even possible?

The "date" command works without using the "system" function because it
is part of the special syntax for the "getline" function.

But I wonder whether you really need to use commands like "rm" and
"touch" inside an awk script. What are you trying to accomplish?

Bye, Andreas

More information about the freebsd-questions mailing list