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 a pound sign (`#').
ARGC, ARGVARGV. ARGC is the number of command-line
arguments present. See Other 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 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 Options), it is not special.
ENVIRONENVIRON["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 AWKPATH Variable).
ERRNO #getline,
during a read for getline, or during a close operation,
then ERRNO contains a string describing the error.
ERRNO works similarly to the C variable errno.
In particular gawk never clears it (sets it
to zero or ""). Thus, you should only expect its value
to be meaningful when an I/O operation returns a failure
value, such as getline returning −1.
You are, of course, free to clear it yourself before doing an
I/O operation.
This variable is a gawk extension. In other awk implementations, or if gawk is in compatibility mode (see Options), it is not special.
FILENAMEFILENAME is set to "-".
FILENAME is changed each time a new file is read
(see Reading 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 Getline)
inside a BEGIN rule can give
FILENAME a value.
FNRFNR is
incremented each time a new record is read
(see Getline). It is reinitialized
to zero each time a new input file is started.
NFNF is set each time a new record is read, when a new field is
created or when $0 changes (see Fields).
Unlike most of the variables described in this
section,
assigning a value to NF has the potential to affect
awk's internal workings. In particular, assignments
to NF can be used to create or remove fields from the
current record: See Changing Fields.
NRNR is incremented each time a new record is read.
PROCINFO #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.
PROCINFO["version"]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 Reference to Elements).
This array is a gawk extension. In other awk implementations, or if gawk is in compatibility mode (see Options), it is not special.
RLENGTHmatch function
(see String 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.
RSTARTmatch function
(see String 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 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 V7/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.
[1] 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.