DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(gawk.info.gz) ARGC and ARGV

Info Catalog (gawk.info.gz) Auto-set (gawk.info.gz) Built-in Variables
 
 Using `ARGC' and `ARGV'
 -----------------------
 
     Built-in Variables That Convey Information Auto-set,
 presented the following program describing the information contained in
 `ARGC' and `ARGV':
 
      $ awk 'BEGIN {
      >        for (i = 0; i < ARGC; i++)
      >            print ARGV[i]
      >      }' inventory-shipped BBS-list
      -| awk
      -| inventory-shipped
      -| BBS-list
 
 In this example, `ARGV[0]' contains `awk', `ARGV[1]' contains
 `inventory-shipped', and `ARGV[2]' contains `BBS-list'.  Notice that
 the `awk' program is not entered in `ARGV'.  The other special
 command-line options, with their arguments, are also not entered.  This
 includes variable assignments done with the `-v' option (
 Command-Line Options Options.).  Normal variable assignments on the
 command line _are_ treated as arguments and do show up in the `ARGV'
 array:
 
      $ cat showargs.awk
      -| BEGIN {
      -|     printf "A=%d, B=%d\n", A, B
      -|     for (i = 0; i < ARGC; i++)
      -|         printf "\tARGV[%d] = %s\n", i, ARGV[i]
      -| }
      -| END   { printf "A=%d, B=%d\n", A, B }
      $ awk -v A=1 -f showargs.awk B=2 /dev/null
      -| A=1, B=0
      -|        ARGV[0] = awk
      -|        ARGV[1] = B=2
      -|        ARGV[2] = /dev/null
      -| A=1, B=2
 
    A program can alter `ARGC' and the elements of `ARGV'.  Each time
 `awk' reaches the end of an input file, it uses the next element of
 `ARGV' as the name of the next input file.  By storing a different
 string there, a program can change which files are read.  Use `"-"' to
 represent the standard input.  Storing additional elements and
 incrementing `ARGC' causes additional files to be read.
 
    If the value of `ARGC' is decreased, that eliminates input files
 from the end of the list.  By recording the old value of `ARGC'
 elsewhere, a program can treat the eliminated arguments as something
 other than file names.
 
    To eliminate a file from the middle of the list, store the null
 string (`""') into `ARGV' in place of the file's name.  As a special
 feature, `awk' ignores file names that have been replaced with the null
 string.  Another option is to use the `delete' statement to remove
 elements from `ARGV' ( The `delete' Statement Delete.).
 
    All of these actions are typically done in the `BEGIN' rule, before
DONTPRINTYET  actual processing of the input begins.   Splitting a Large File
 into Pieces Split Program, and see *Note Duplicating Output into
DONTPRINTYET  actual processing of the input begins.   Splitting a Large File
 into Pieces Split Program, and see  Duplicating Output into

 Multiple Files Tee Program, for examples of each way of removing
 elements from `ARGV'.  The following fragment processes `ARGV' in order
 to examine, and then remove, command-line options:
 
      BEGIN {
          for (i = 1; i < ARGC; i++) {
              if (ARGV[i] == "-v")
                  verbose = 1
              else if (ARGV[i] == "-d")
                  debug = 1
              else if (ARGV[i] ~ /^-?/) {
                  e = sprintf("%s: unrecognized option -- %c",
                          ARGV[0], substr(ARGV[i], 1, ,1))
                  print e > "/dev/stderr"
              } else
                  break
              delete ARGV[i]
          }
      }
 
    To actually get the options into the `awk' program, end the `awk'
 options with `--' and then supply the `awk' program's options, in the
 following manner:
 
      awk -f myprog -- -v -d file1 file2 ...
 
    This is not necessary in `gawk'. Unless `--posix' has been
 specified, `gawk' silently puts any unrecognized options into `ARGV'
 for the `awk' program to deal with.  As soon as it sees an unknown
 option, `gawk' stops looking for other options that it might otherwise
 recognize.  The previous example with `gawk' would be:
 
      gawk -f myprog -d -v file1 file2 ...
 
 Because `-d' is not a valid `gawk' option, it and the following `-v'
 are passed on to the `awk' program.
 
Info Catalog (gawk.info.gz) Auto-set (gawk.info.gz) Built-in Variables
automatically generated byinfo2html