FORMATS(7) Standards, Environments, and Macros FORMATS(7)

NAME


formats - file format notation

DESCRIPTION


Utility descriptions use a syntax to describe the data organization
within files--stdin, stdout, stderr, input files, and output
files--when that organization is not otherwise obvious. The syntax is
similar to that used by the printf(3C) function. When used for
stdin or input file descriptions, this syntax describes the format
that could have been used to write the text to be read, not a format
that could be used by the scanf(3C) function to read the input file.

Format


The description of an individual record is as follows:

"<format>", [<arg1>, <arg2>, ..., <argn>]


The format is a character string that contains three types of objects
defined below:

characters
Characters that are not escape
sequences or conversion specifications,
as described below, are copied to the
output.


escape sequences
Represent non-graphic characters.


conversion specifications
Specifies the output format of each
argument. (See below.)


The following characters have the following special meaning in the
format string:

`` ''
(An empty character position.) One or more blank
characters.


/\
Exactly one space character.


The notation for spaces allows some flexibility for application
output. Note that an empty character position in format represents
one or more blank characters on the output (not white space, which
can include newline characters). Therefore, another utility that
reads that output as its input must be prepared to parse the data
using scanf(3C), awk(1), and so forth. The character is used when
exactly one space character is output.

Escape Sequences


The following table lists escape sequences and associated actions on
display devices capable of the action.


Sequence Character Terminal Action
------------------------------------------------
\\ backslash None.
\a alert Attempts to alert
the user through
audible or visible
notification.
\b backspace Moves the printing
position to one
column before the
current position,
unless the current
position is the
start of a line.
\f form-feed Moves the printing
position to the
initial printing
position of the
next logical page.
\n newline Moves the printing
position to the
start of the next
line.
\r carriage-return Moves the printing
position to the
start of the
current line.
\t tab Moves the printing
position to the
next tab position
on the current
line. If there are
no more tab
positions left on
the line, the
behavior is
undefined.
\v vertical-tab Moves the printing
position to the
start of the next
vertical tab
position. If there
are no more
vertical tab
positions left on
the page, the
behavior is
undefined.


Conversion Specifications


Each conversion specification is introduced by the percent-sign
character (%). After the character %, the following appear in
sequence:

flags
Zero or more flags, in any order, that
modify the meaning of the conversion
specification.


field width
An optional string of decimal digits to
specify a minimum field width. For an
output field, if the converted value has
fewer bytes than the field width, it is
padded on the left (or right, if the left-
adjustment flag (-), described below, has
been given to the field width).


precision
Gives the minimum number of digits to
appear for the d, o, i, u, x or X
conversions (the field is padded with
leading zeros), the number of digits to
appear after the radix character for the e
and f conversions, the maximum number of
significant digits for the g conversion; or
the maximum number of bytes to be written
from a string in s conversion. The
precision takes the form of a period (.)
followed by a decimal digit string; a null
digit string is treated as zero.


conversion characters
A conversion character (see below) that
indicates the type of conversion to be
applied.


flags
The flags and their meanings are:

-
The result of the conversion is left-justified within the
field.


+
The result of a signed conversion always begins with a
sign (+ or -).


<space>
If the first character of a signed conversion is not a
sign, a space character is prefixed to the result. This
means that if the space character and + flags both
appear, the space character flag is ignored.


#
The value is to be converted to an alternative form. For
c, d, i, u, and s conversions, the behaviour is
undefined. For o conversion, it increases the precision
to force the first digit of the result to be a zero. For
x or X conversion, a non-zero result has 0x or 0X
prefixed to it, respectively. For e, E, f, g, and G
conversions, the result always contains a radix
character, even if no digits follow the radix character.
For g and G conversions, trailing zeros are not removed
from the result as they usually are.


0
For d, i, o, u, x, X, e, E, f, g, and G conversions,
leading zeros (following any indication of sign or base)
are used to pad to the field width; no space padding is
performed. If the 0 and - flags both appear, the 0 flag
is ignored. For d, i, o, u, x and X conversions, if a
precision is specified, the 0 flag is ignored. For other
conversions, the behaviour is undefined.


Conversion Characters


Each conversion character results in fetching zero or more arguments.
The results are undefined if there are insufficient arguments for the
format. If the format is exhausted while arguments remain, the excess
arguments are ignored.


The conversion characters and their meanings are:

d,i,o,u,x,X
The integer argument is written as signed decimal (d
or i), unsigned octal (o), unsigned decimal (u), or
unsigned hexadecimal notation (x and X). The d and i
specifiers convert to signed decimal in the style
[-]dddd. The x conversion uses the numbers and
letters 0123456789abcdef and the X conversion uses
the numbers and letters 0123456789ABCDEF. The
precision component of the argument specifies the
minimum number of digits to appear. If the value
being converted can be represented in fewer digits
than the specified minimum, it is expanded with
leading zeros. The default precision is 1. The result
of converting a zero value with a precision of 0 is
no characters. If both the field width and precision
are omitted, the implementation may precede, follow
or precede and follow numeric arguments of types d, i
and u with blank characters; arguments of type o
(octal) may be preceded with leading zeros.

The treatment of integers and spaces is different
from the printf(3C) function in that they can be
surrounded with blank characters. This was done so
that, given a format such as:

"%d\n",<foo>

the implementation could use a printf() call such as:

printf("%6d\n", foo);

and still conform. This notation is thus somewhat
like scanf() in addition to printf().


f
The floating point number argument is written in
decimal notation in the style [-]ddd.ddd, where the
number of digits after the radix character (shown
here as a decimal point) is equal to the precision
specification. The LC_NUMERIC locale category
determines the radix character to use in this format.
If the precision is omitted from the argument, six
digits are written after the radix character; if the
precision is explicitly 0, no radix character
appears.


e,E
The floating point number argument is written in the
style [-]d.ddde+-dd (the symbol +- indicates either a
plus or minus sign), where there is one digit before
the radix character (shown here as a decimal point)
and the number of digits after it is equal to the
precision. The LC_NUMERIC locale category determines
the radix character to use in this format. When the
precision is missing, six digits are written after
the radix character; if the precision is 0, no radix
character appears. The E conversion character
produces a number with E instead of e introducing the
exponent. The exponent always contains at least two
digits. However, if the value to be written requires
an exponent greater than two digits, additional
exponent digits are written as necessary.


g,G
The floating point number argument is written in
style f or e (or in style E in the case of a G
conversion character), with the precision specifying
the number of significant digits. The style used
depends on the value converted: style g is used only
if the exponent resulting from the conversion is less
than -4 or greater than or equal to the precision.
Trailing zeros are removed from the result. A radix
character appears only if it is followed by a digit.


c
The integer argument is converted to an unsigned char
and the resulting byte is written.


s
The argument is taken to be a string and bytes from
the string are written until the end of the string or
the number of bytes indicated by the precision
specification of the argument is reached. If the
precision is omitted from the argument, it is taken
to be infinite, so all bytes up to the end of the
string are written.


%
Write a % character; no argument is converted.


In no case does a non-existent or insufficient field width cause
truncation of a field; if the result of a conversion is wider than
the field width, the field is simply expanded to contain the
conversion result. The term field width should not be confused with
the term precision used in the description of %s.


One difference from the C function printf() is that the l and h
conversion characters are not used. There is no differentiation
between decimal values for type int, type long, or type short. The
specifications %d or %i should be interpreted as an arbitrary length
sequence of digits. Also, no distinction is made between single
precision and double precision numbers (float or double in C). These
are simply referred to as floating point numbers.


Many of the output descriptions use the term line, such as:

"%s", <input line>


Since the definition of line includes the trailing newline character
already, there is no need to include a \n in the format; a double
newline character would otherwise result.

EXAMPLES


Example 1: To represent the output of a program that prints a date and


time in the form Sunday, July 3, 10:02, where <weekday> and <month>
are strings:

"%s,/\%s/\%d,/\%d:%.2d\n",<weekday>,<month>,<day>,<hour>,<min>


Example 2: To show pi written to 5 decimal places:



"pi/\=/\%.5f\n",<value of pi>


Example 3: To show an input file format consisting of five colon-


separated fields:

"%s:%s:%s:%s:%s\n",<arg1>,<arg2>,<arg3>,<arg4>,<arg5>


SEE ALSO


awk(1), printf(1), printf(3C), scanf(3C)

March 28, 1995 FORMATS(7)

tribblix@gmail.com :: GitHub :: Privacy