Next: Naming Standard Input, Previous: Options, Up: Invoking Gawk [Contents][Index]
Any additional arguments on the command line are normally treated as
input files to be processed in the order specified. However, an
argument that has the form var=value, assigns
the value value to the variable var—it does not specify a
file at all. (See Assigning Variables on the Command Line.) In the following example,
count=1 is a variable assignment, not a file name:
awk -f program.awk file1 count=1 file2
All the command-line arguments are made available to your awk program in the
ARGV array (see section Predefined Variables). Command-line options
and the program text (if present) are omitted from ARGV.
All other arguments, including variable assignments, are
included. As each element of ARGV is processed, gawk
sets ARGIND to the index in ARGV of the
current element.
Changing ARGC and ARGV in your awk program lets
you control how awk processes the input files; this is described
in more detail in Using ARGC and ARGV.
The distinction between file name arguments and variable-assignment
arguments is made when awk is about to open the next input file.
At that point in execution, it checks the file name to see whether
it is really a variable assignment; if so, awk sets the variable
instead of reading a file.
Therefore, the variables actually receive the given values after all
previously specified files have been read. In particular, the values of
variables assigned in this fashion are not available inside a
BEGIN rule
(see section The BEGIN and END Special Patterns),
because such rules are run before awk begins scanning the argument list.
The variable values given on the command line are processed for escape sequences (see section Escape Sequences). (d.c.)
In some very early implementations of awk, when a variable assignment
occurred before any file names, the assignment would happen before
the BEGIN rule was executed. awk’s behavior was thus
inconsistent; some command-line assignments were available inside the
BEGIN rule, while others were not. Unfortunately,
some applications came to depend
upon this “feature.” When awk was changed to be more consistent,
the -v option was added to accommodate applications that depended
upon the old behavior.
The variable assignment feature is most useful for assigning to variables
such as RS, OFS, and ORS, which control input and
output formats, before scanning the data files. It is also useful for
controlling state if multiple passes are needed over a data file. For
example:
awk 'pass == 1 { pass 1 stuff }
pass == 2 { pass 2 stuff }' pass=1 mydata pass=2 mydata
Given the variable assignment feature, the -F option for setting
the value of FS is not
strictly necessary. It remains for historical compatibility.
Next: Naming Standard Input, Previous: Options, Up: Invoking Gawk [Contents][Index]