GNU Info

Info Node: (gawk.info)Format Modifiers

(gawk.info)Format Modifiers


Next: Printf Examples Prev: Control Letters Up: Printf
Enter node , (file) or (file)node

Modifiers for `printf' Formats
------------------------------

   A format specification can also include "modifiers" that can control
how much of the item's value is printed, as well as how much space it
gets.  The modifiers come between the `%' and the format-control letter.
We will use the bullet symbol "*" in the following examples to represent
spaces in the output. Here are the possible modifiers, in the order in
which they may appear:

`N$'
     An integer constant followed by a `$' is a "positional specifier".
     Normally, format specifications are applied to arguments in the
     order given in the format string.  With a positional specifier,
     the format specification is applied to a specific argument,
     instead of what would be the next argument in the list.
     Positional specifiers begin counting with one:

          printf "%s %s\n", "don't", "panic"
          printf "%2$s %1$s\n", "panic", "don't"

     prints the famous friendly message twice.

     At first glance, this feature doesn't seem to be of much use.  It
     is in fact a `gawk' extension, intended for use in translating
     messages at runtime.  Note: Rearranging `printf' Arguments,
 which describes how and why to use positional specifiers.
     For now, we will not use them.

`-'
     The minus sign, used before the width modifier (see further on in
     this table), 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 further on in
     this table), says to always supply a sign for numeric conversions,
     even if the data to format 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 nonzero result.  For `%e', `%E', and `%f', the
     result always contains 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 that 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 print.

`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 expand 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, the following:

          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'
     A period followed by an integer constant specifies the precision
     to use when printing.  The meaning of the precision varies by
     control letter:

    `%e', `%E', `%f'
          Number of digits to the right of the decimal point.

    `%g', `%G'
          Maximum number of significant digits.

    `%d', `%i', `%o', `%u', `%x', `%X'
          Minimum number of digits to print.

    `%s'
          Maximum number of characters from the string that should
          print.

     Thus, the following:

          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, they are passed 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', `L', and `h'
modifiers in `printf' format strings. These are not valid in `awk'.
Most `awk' implementations silently ignore these modifiers.  If
`--lint' is provided on the command line (*note Command-Line Options:
Options.), `gawk' warns about their use. If `--posix' is supplied,
their use is a fatal error.


automatically generated by info2www version 1.2.2.9