5.4 Controlling Numeric Output with print

When printing numeric values with the print statement, awk internally converts each number to a string of characters and prints that string. awk uses the sprintf() function to do this conversion (see String-Manipulation Functions). For now, it suffices to say that the sprintf() function accepts a format specification that tells it how to format numbers (or strings), and that there are a number of different ways in which numbers can be formatted. The different format specifications are discussed more fully in Format-Control Letters.

The predefined variable OFMT contains the format specification that print uses with sprintf() when it wants to convert a number to a string for printing. The default value of OFMT is "%.6g". The way print prints numbers can be changed by supplying a different format specification for the value of OFMT, as shown in the following example:

$ awk 'BEGIN {
>   OFMT = "%.0f"  # print numbers as integers (rounds)
>   print 17.23, 17.54 }'
-| 17 18

More detail on how awk converts numeric values into strings is provided in How awk Converts Between Strings and Numbers. In particular, for print, awk uses the value of OFMT instead of that of CONVFMT, but otherwise behaves exactly the same as described in that section.

According to the POSIX standard, awk’s behavior is undefined if OFMT contains anything but a floating-point conversion specification. (d.c.)