gawk: Other Arguments

 
 2.3 Other Command-Line Arguments
 ================================
 
 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 SeeAssignment
 Options.)  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 (SeeBuilt-in 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
 SeeARGC 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 (SeeBEGIN/END), 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 (SeeEscape 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.