gawk: Using BEGIN/END

 
 7.1.4.1 Startup and Cleanup Actions
 ...................................
 
 A 'BEGIN' rule is executed once only, before the first input record is
 read.  Likewise, an 'END' rule is executed once only, after all the
 input is read.  For example:
 
      $ awk '
      > BEGIN { print "Analysis of \"li\"" }
      > /li/  { ++n }
      > END   { print "\"li\" appears in", n, "records." }' mail-list
      -| Analysis of "li"
      -| "li" appears in 4 records.
 
    This program finds the number of records in the input file
 'mail-list' that contain the string 'li'.  The 'BEGIN' rule prints a
 title for the report.  There is no need to use the 'BEGIN' rule to
 initialize the counter 'n' to zero, as 'awk' does this automatically
 (SeeVariables).  The second rule increments the variable 'n' every
 time a record containing the pattern 'li' is read.  The 'END' rule
 prints the value of 'n' at the end of the run.
 
    The special patterns 'BEGIN' and 'END' cannot be used in ranges or
 with Boolean operators (indeed, they cannot be used with any operators).
 An 'awk' program may have multiple 'BEGIN' and/or 'END' rules.  They are
 executed in the order in which they appear: all the 'BEGIN' rules at
 startup and all the 'END' rules at termination.  'BEGIN' and 'END' rules
 may be intermixed with other rules.  This feature was added in the 1987
 version of 'awk' and is included in the POSIX standard.  The original
 (1978) version of 'awk' required the 'BEGIN' rule to be placed at the
 beginning of the program, the 'END' rule to be placed at the end, and
 only allowed one of each.  This is no longer required, but it is a good
 idea to follow this template in terms of program organization and
 readability.
 
    Multiple 'BEGIN' and 'END' rules are useful for writing library
 functions, because each library file can have its own 'BEGIN' and/or
 'END' rule to do its own initialization and/or cleanup.  The order in
 which library functions are named on the command line controls the order
 in which their 'BEGIN' and 'END' rules are executed.  Therefore, you
 have to be careful when writing such rules in library files so that the
 order in which they are executed doesn't matter.  SeeOptions for
 more information on using library functions.  SeeLibrary Functions,
 for a number of useful library functions.
 
    If an 'awk' program has only 'BEGIN' rules and no other rules, then
 the program exits after the 'BEGIN' rules are run.(1)  However, if an
 'END' rule exists, then the input is read, even if there are no other
 rules in the program.  This is necessary in case the 'END' rule checks
 the 'FNR' and 'NR' variables.
 
    ---------- Footnotes ----------
 
    (1) The original version of 'awk' kept reading and ignoring input
 until the end of the file was seen.