GNU Info

Info Node: (gawk.info)Auto-set

(gawk.info)Auto-set


Next: ARGC and ARGV Prev: User-modified Up: Built-in Variables
Enter node , (file) or (file)node

Built-in Variables That Convey Information
------------------------------------------

   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'
     The command-line arguments available to `awk' programs are stored
     in an array called `ARGV'.  `ARGC' is the number of command-line
     arguments present.  Note: 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.  Note: Using `ARGC' and
     `ARGV', for information about how `awk' uses these
     variables.

`ARGIND #'
     This is the index in `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 (Note:
     Command-Line Options.), it is not special.

`ENVIRON'
     An associative array that contains the values of the environment.
     The array indices are the environment variable names; the elements
     are the values of the particular environment variables.  For
     example, `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"]', *note The `AWKPATH' Environment Variable:
     AWKPATH Variable.).

`ERRNO #'
     If a system error occurs during a redirection for `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 (Note:
     Command-Line Options.), it is not special.

`FILENAME'
     This is the name of the file that `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 (Note: 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' (Note: Explicit
     Input with `getline'.)  inside a `BEGIN' rule can give
     `FILENAME' a value.

`FNR'
     This is the current record number in the current file.  `FNR' is
     incremented each time a new record is read (Note: Explicit Input
     with `getline'.).  It is reinitialized to zero each time
     a new input file is started.

`NF'
     This is the number of fields in the current input record.  `NF' is
     set each time a new record is read, when a new field is created or
     when `$0' changes (Note: Examining Fields.).

`NR'
     This is the number of input records `awk' has processed since the
     beginning of the program's execution (Note: How Input Is Split
     into Records.).  `NR' is incremented each time a new
     record is read.

`PROCINFO #'
     The elements of this array provide access to information about the
     running `awk' program.  The following elements (listed
     alphabetically) are guaranteed to be available:

    `PROCINFO["egid"]'
          The value of the `getegid' system call.

    `PROCINFO["euid"]'
          The value of the `geteuid' system call.

    `PROCINFO["FS"]'
          This is `"FS"' if field splitting with `FS' is in effect, or
          it is `"FIELDWIDTHS"' if field splitting with `FIELDWIDTHS'
          is in effect.

    `PROCINFO["gid"]'
          The value of the `getgid' system call.

    `PROCINFO["pgrpid"]'
          The process group ID of the current process.

    `PROCINFO["pid"]'
          The process ID of the current process.

    `PROCINFO["ppid"]'
          The parent process ID of the current process.

    `PROCINFO["uid"]'
          The value of the `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 (Note: Referring to an Array Element.
).

     This array is a `gawk' extension.  In other `awk' implementations,
     or if `gawk' is in compatibility mode (*note Command-Line Options:
     Options.), it is not special.

`RLENGTH'
     This is the length of the substring matched by the `match' function
     (Note: 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'
     This is the start-index in characters of the substring that is
     matched by the `match' function (Note: 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 #'
     This is set each time a record is read. It contains the input text
     that matched the text denoted by `RS', the record separator.

     This variable is a `gawk' extension.  In other `awk'
     implementations, or if `gawk' is in compatibility mode (Note:
     Command-Line Options.), it is not special.

Advanced Notes: Changing `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 (Note: Major Changes
Between V7 and SVR3.1.1.), many `awk' programs used this
feature to track the number of records in a file by resetting `NR' to
zero when `FILENAME' changed.

   ---------- Footnotes ----------

   (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.


automatically generated by info2www version 1.2.2.9