DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(gawk.info.gz) Using BEGIN/END

Info Catalog (gawk.info.gz) BEGIN/END (gawk.info.gz) BEGIN/END (gawk.info.gz) I/O And BEGIN/END
 
 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 \"foo\"" }
      > /foo/ { ++n }
      > END   { print "\"foo\" appears", n, "times." }' BBS-list
      -| Analysis of "foo"
      -| "foo" appears 4 times.
 
    This program finds the number of records in the input file `BBS-list'
 that contain the string `foo'.  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, since `awk' does this automatically (
 Variables).  The second rule increments the variable `n' every time a
 record containing the pattern `foo' 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.  
 Command-Line Options Options, for more information on using library
 functions.   A Library of `awk' Functions Library Functions, for
 a number of useful library functions.
 
    If an `awk' program has only a `BEGIN' rule and no other rules, then
 the program exits after the `BEGIN' rule is 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' used to keep reading and ignoring
 input until the end of the file was seen.
 
Info Catalog (gawk.info.gz) BEGIN/END (gawk.info.gz) BEGIN/END (gawk.info.gz) I/O And BEGIN/END
automatically generated byinfo2html