print
and printf
So far we have been dealing only with output that prints to the standard
output, usually your terminal. Both print
and printf
can
also send their output to other places.
This is called redirection.
A redirection appears after the print
or printf
statement.
Redirections in awk
are written just like redirections in shell
commands, except that they are written inside the awk
program.
There are three forms of output redirection: output to a file,
output appended to a file, and output through a pipe to another
command.
They are all shown for
the print
statement, but they work identically for printf
also.
print items > output-file
awk
program can write a list of
BBS names to a file `name-list' and a list of phone numbers to a
file `phone-list'. Each output file contains one name or number
per line.
$ awk '{ print $2 > "phone-list" > print $1 > "name-list" }' BBS-list $ cat phone-list -| 555-5553 -| 555-3412 ... $ cat name-list -| aardvark -| alpo-net ...
print items >> output-file
awk
output is
appended to the file.
If output-file does not exist, then it is created.
print items | command
awk
expression. Its value is converted to a string, whose contents give the
shell command to be run.
For example, this produces two files, one unsorted list of BBS names
and one list sorted in reverse alphabetical order:
awk '{ print $1 > "names.unsorted" command = "sort -r > names.sorted" print $1 | command }' BBS-listHere the unsorted list is written with an ordinary redirection while the sorted list is written by piping through the
sort
utility.
This example uses redirection to mail a message to a mailing
list `bug-system'. This might be useful when trouble is encountered
in an awk
script run periodically for system maintenance.
report = "mail bug-system" print "Awk script failed:", $0 | report m = ("at record number " FNR " of " FILENAME) print m | report close(report)The message is built using string concatenation and saved in the variable
m
. It is then sent down the pipeline to the mail
program.
We call the close
function here because it's a good idea to close
the pipe as soon as all the intended output has been sent to it.
See section Closing Input and Output Files and Pipes,
for more information
on this. This example also illustrates the use of a variable to represent
a file or command: it is not necessary to always
use a string constant. Using a variable is generally a good idea,
since awk
requires you to spell the string value identically
every time.
Redirecting output using `>', `>>', or `|' asks the system to open a file or pipe only if the particular file or command you've specified has not already been written to by your program, or if it has been closed since it was last written to.
As mentioned earlier
(see section Summary of getline
Variants),
many
awk
implementations limit the number of pipelines an awk
program may have open to just one! In gawk
, there is no such limit.
You can open as many pipelines as the underlying operating system will
permit.
Go to the first, previous, next, last section, table of contents.