(gawk.info)Printf Examples
Examples 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:
$ awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list
-| 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. If we had tried to print the phone
numbers as numbers, all we would have gotten would have been the first
three digits, `555'. This would have been pretty confusing.
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, we use the `BEGIN' pattern (Note: The
`BEGIN' and `END' Special Patterns.) 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 printing 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 (Note: The `print' Statement.).
Prev: Format Modifiers Up: Printf
[ Dokumentation lokal installierter Software ]