Node:Auto-set, Next:ARGC and ARGV, Previous:User-modified, Up:Built-in Variables
The following is an alphabetical list of variables that awk
sets automatically on certain occasions in order to provide
information to your program. The variables that are specific to
gawk are marked with an asterisk (*).
ARGC, ARGV
awk programs are stored in
an array called ARGV. ARGC is the number of command-line
arguments present. See Other Command-Line Arguments.
Unlike most awk arrays,
ARGV is indexed from 0 to ARGC - 1.
In the following example:
$ awk 'BEGIN {
> for (i = 0; i < ARGC; i++)
> print ARGV[i]
> }' inventory-shipped BBS-list
-| awk
-| inventory-shipped
-| BBS-list
ARGV[0] contains "awk", ARGV[1]
contains "inventory-shipped", and ARGV[2] contains
"BBS-list". The value of ARGC is three, one more than the
index of the last element in ARGV, because the elements are numbered
from zero.
The names ARGC and ARGV, as well as the convention of indexing
the array from 0 to ARGC - 1, are derived from the C language's
method of accessing command-line arguments.
The value of ARGV[0] can vary from system to system.
Also, you should note that the program text is not included in
ARGV, nor are any of awk's command-line options.
See Using ARGC and ARGV, for information
about how awk uses these variables.
ARGIND #
ARGV of the current file being processed.
Every time gawk opens a new data file for processing, it sets
ARGIND to the index in ARGV of the file name.
When gawk is processing the input files,
FILENAME == ARGV[ARGIND] is always true.
This variable is useful in file processing; it allows you to tell how far along you are in the list of data files as well as to distinguish between successive instances of the same file name on the command line.
While you can change the value of ARGIND within your awk
program, gawk automatically sets it to a new value when the
next file is opened.
This variable is a gawk extension.
In other awk implementations,
or if gawk is in compatibility mode
(see Command-Line Options),
it is not special.
ENVIRON
ENVIRON["HOME"] might be /home/arnold. Changing this array
does not affect the environment passed on to any programs that
awk may spawn via redirection or the system function.
Some operating systems may not have environment variables.
On such systems, the ENVIRON array is empty (except for
ENVIRON["AWKPATH"],
see The AWKPATH Environment Variable).
ERRNO #
getline,
during a read for getline, or during a close operation,
then ERRNO contains a string describing the error.
This variable is a gawk extension.
In other awk implementations,
or if gawk is in compatibility mode
(see Command-Line Options),
it is not special.
FILENAME
awk is currently reading.
When no data files are listed on the command line, awk reads
from the standard input and FILENAME is set to "-".
FILENAME is changed each time a new file is read
(see Reading Input Files).
Inside a BEGIN rule, the value of FILENAME is
"", since there are no input files being processed
yet.1
(d.c.)
Note, though, that using getline
(see Explicit Input with getline)
inside a BEGIN rule can give
FILENAME a value.
FNR
FNR is
incremented each time a new record is read
(see Explicit Input with getline). It is reinitialized
to zero each time a new input file is started.
NF
NF is set each time a new record is read, when a new field is
created or when $0 changes (see Examining Fields).
NR
awk has processed since
the beginning of the program's execution
(see How Input Is Split into Records).
NR is incremented each time a new record is read.
PROCINFO #
awk program.
The following elements (listed alphabetically)
are guaranteed to be available:
PROCINFO["egid"]
getegid system call.
PROCINFO["euid"]
geteuid system call.
PROCINFO["FS"]
"FS" if field splitting with FS is in effect, or it is
"FIELDWIDTHS" if field splitting with FIELDWIDTHS is in effect.
PROCINFO["gid"]
getgid system call.
PROCINFO["pgrpid"]
PROCINFO["pid"]
PROCINFO["ppid"]
PROCINFO["uid"]
getuid system call.
On some systems, there may be elements in the array, "group1"
through "groupN" for some N. N is the number of
supplementary groups that the process has. Use the in operator
to test for these elements
(see Referring to an Array Element).
This array is a gawk extension.
In other awk implementations,
or if gawk is in compatibility mode
(see Command-Line Options),
it is not special.
RLENGTH
match function
(see String Manipulation Functions).
RLENGTH is set by invoking the match function. Its value
is the length of the matched string, or -1 if no match is found.
RSTART
match function
(see String Manipulation Functions).
RSTART is set by invoking the match function. Its value
is the position of the string where the matched substring starts, or zero
if no match was found.
RT #
RS, the record separator.
This variable is a gawk extension.
In other awk implementations,
or if gawk is in compatibility mode
(see Command-Line Options),
it is not special.
NR and FNRawk increments NR and FNR
each time it reads a record, instead of setting them to the absolute
value of the number of records read. This means that a program can
change these variables and their new values are incremented for
each record.
(d.c.)
This is demonstrated in the following example:
$ echo '1
> 2
> 3
> 4' | awk 'NR == 2 { NR = 17 }
> { print NR }'
-| 1
-| 17
-| 18
-| 19
Before FNR was added to the awk language
(see Major Changes Between V7 and SVR3.1),
many awk programs used this feature to track the number of
records in a file by resetting NR to zero when FILENAME
changed.
Some early implementations of Unix awk initialized
FILENAME to "-", even if there were data files to be
processed. This behavior was incorrect and should not be relied
upon in your programs.