Go backward to Format Modifiers.
Go up to Printf.
Examples of Using `printf'
--------------------------
Here is how to use `printf' to make an aligned table:
awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list
prints the names of bulletin boards (`$1') of the file `BBS-list' as a
string of 10 characters, left justified. It also prints the phone
numbers (`$2') afterward on the line. This produces an aligned
two-column table of names and phone numbers:
aardvark 555-5553
alpo-net 555-3412
barfly 555-7685
bites 555-1675
camelot 555-0542
core 555-2912
fooey 555-1234
foot 555-6699
macfoo 555-6480
sdace 555-3430
sabafoo 555-2127
Did you notice that we did not specify that the phone numbers be
printed as numbers? They had to be printed as strings because the
numbers are separated by a dash. This dash would be interpreted as a
minus sign if we had tried to print the phone numbers as numbers. This
would have led to some pretty confusing results.
We did not specify a width for the phone numbers because they are the
last things on their lines. We don't need to put spaces after them.
We could make our table look even nicer by adding headings to the
tops of the columns. To do this, use the `BEGIN' pattern (
see `BEGIN' and `END' Special Patterns: BEGIN/END.) to force the header to
be printed only once, at the beginning of the `awk' program:
awk 'BEGIN { print "Name Number"
print "---- ------" }
{ printf "%-10s %s\n", $1, $2 }' BBS-list
Did you notice that we mixed `print' and `printf' statements in the
above example? We could have used just `printf' statements to get the
same results:
awk 'BEGIN { printf "%-10s %s\n", "Name", "Number"
printf "%-10s %s\n", "----", "------" }
{ printf "%-10s %s\n", $1, $2 }' BBS-list
By outputting each column heading with the same format specification
used for the elements of the column, we have made sure that the headings
are aligned just like the columns.
The fact that the same format specification is used three times can
be emphasized by storing it in a variable, like this:
awk 'BEGIN { format = "%-10s %s\n"
printf format, "Name", "Number"
printf format, "----", "------" }
{ printf format, $1, $2 }' BBS-list
See if you can use the `printf' statement to line up the headings and
table data for our `inventory-shipped' example covered earlier in the
section on the `print' statement (see The `print' Statement: Print.).