DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(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