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
, ARGV
ARGV
. 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.
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 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.
FILENAME
FILENAME
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.
FNR
FNR
is
incremented each time a new record is read
(see 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 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.
NR
NR
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 "group
N"
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.
RLENGTH
match
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.
RSTART
match
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 FNR
awk 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.