Node:Print Examples, Next:Output Separators, Previous:Print, Up:Printing
print
StatementsEach print
statement makes at least one line of output. However, it
isn't limited to only one line. If an item value is a string that contains a
newline, the newline is output along with the rest of the string. A
single print
statement can make any number of lines this way.
The following is an example of printing a string that contains embedded newlines
(the \n
is an escape sequence, used to represent the newline
character; see Escape Sequences):
$ awk 'BEGIN { print "line one\nline two\nline three" }' -| line one -| line two -| line three
The next example, which is run on the inventory-shipped
file,
prints the first two fields of each input record, with a space between
them:
$ awk '{ print $1, $2 }' inventory-shipped -| Jan 13 -| Feb 15 -| Mar 15 ...
A common mistake in using the print
statement is to omit the comma
between two items. This often has the effect of making the items run
together in the output, with no space. The reason for this is that
juxtaposing two string expressions in awk
means to concatenate
them. Here is the same program, without the comma:
$ awk '{ print $1 $2 }' inventory-shipped -| Jan13 -| Feb15 -| Mar15 ...
To someone unfamiliar with the inventory-shipped
file, neither
example's output makes much sense. A heading line at the beginning
would make it clearer. Let's add some headings to our table of months
($1
) and green crates shipped ($2
). We do this using the
BEGIN
pattern
(see The BEGIN
and END
Special Patterns)
so that the headings are only printed once:
awk 'BEGIN { print "Month Crates" print "----- ------" } { print $1, $2 }' inventory-shipped
When run, the program prints the following:
Month Crates ----- ------ Jan 13 Feb 15 Mar 15 ...
The only problem, however, is that the headings and the table data
don't line up! We can fix this by printing some spaces between the
two fields:
awk 'BEGIN { print "Month Crates" print "----- ------" } { print $1, " ", $2 }' inventory-shipped
Lining up columns this way can get pretty
complicated when there are many columns to fix. Counting spaces for two
or three columns is simple, but any more than this can take up
a lot of time. This is why the printf
statement was
created (see Using printf
Statements for Fancier Printing);
one of its specialties is lining up columns of data.
Note: You can continue either a print
or
printf
statement simply by putting a newline after any comma
(see awk
Statements Versus Lines).