(gawk.info) Format Modifiers
Info Catalog
(gawk.info) Control Letters
(gawk.info) Printf
(gawk.info) Printf Examples
Modifiers for `printf' Formats
------------------------------
A format specification can also include "modifiers" that can control
how much of the item's value is printed and how much space it gets. The
modifiers come between the `%' and the format-control letter. In the
examples below, we use the bullet symbol "*" to represent spaces in the
output. Here are the possible modifiers, in the order in which they may
appear:
`-'
The minus sign, used before the width modifier (see below), says
to left-justify the argument within its specified width. Normally
the argument is printed right-justified in the specified width.
Thus,
printf "%-4s", "foo"
prints `foo*'.
`SPACE'
For numeric conversions, prefix positive values with a space, and
negative values with a minus sign.
`+'
The plus sign, used before the width modifier (see below), says to
always supply a sign for numeric conversions, even if the data to
be formatted is positive. The `+' overrides the space modifier.
`#'
Use an "alternate form" for certain control letters. For `%o',
supply a leading zero. For `%x', and `%X', supply a leading `0x'
or `0X' for a non-zero result. For `%e', `%E', and `%f', the
result will always contain a decimal point. For `%g', and `%G',
trailing zeros are not removed from the result.
`0'
A leading `0' (zero) acts as a flag, that indicates output should
be padded with zeros instead of spaces. This applies even to
non-numeric output formats (d.c.). This flag only has an effect
when the field width is wider than the value to be printed.
`WIDTH'
This is a number specifying the desired minimum width of a field.
Inserting any number between the `%' sign and the format control
character forces the field to be expanded to this width. The
default way to do this is to pad with spaces on the left. For
example,
printf "%4s", "foo"
prints `*foo'.
The value of WIDTH is a minimum width, not a maximum. If the item
value requires more than WIDTH characters, it can be as wide as
necessary. Thus,
printf "%4s", "foobar"
prints `foobar'.
Preceding the WIDTH with a minus sign causes the output to be
padded with spaces on the right, instead of on the left.
`.PREC'
This is a number that specifies the precision to use when printing.
For the `e', `E', and `f' formats, this specifies the number of
digits you want printed to the right of the decimal point. For
the `g', and `G' formats, it specifies the maximum number of
significant digits. For the `d', `o', `i', `u', `x', and `X'
formats, it specifies the minimum number of digits to print. For
a string, it specifies the maximum number of characters from the
string that should be printed. Thus,
printf "%.4s", "foobar"
prints `foob'.
The C library `printf''s dynamic WIDTH and PREC capability (for
example, `"%*.*s"') is supported. Instead of supplying explicit WIDTH
and/or PREC values in the format string, you pass them in the argument
list. For example:
w = 5
p = 3
s = "abcdefg"
printf "%*.*s\n", w, p, s
is exactly equivalent to
s = "abcdefg"
printf "%5.3s\n", s
Both programs output `**abc'.
Earlier versions of `awk' did not support this capability. If you
must use such a version, you may simulate this feature by using
concatenation to build up the format string, like so:
w = 5
p = 3
s = "abcdefg"
printf "%" w "." p "s\n", s
This is not particularly easy to read, but it does work.
C programmers may be used to supplying additional `l' and `h' flags
in `printf' format strings. These are not valid in `awk'. Most `awk'
implementations silently ignore these flags. If `--lint' is provided
on the command line ( Command Line Options Options.), `gawk' will
warn about their use. If `--posix' is supplied, their use is a fatal
error.
Info Catalog
(gawk.info) Control Letters
(gawk.info) Printf
(gawk.info) Printf Examples
automatically generated byinfo2html