GNU Info

Info Node: (gawk.info)Using BEGIN/END

(gawk.info)Using BEGIN/END


Next: I/O And BEGIN/END Prev: BEGIN/END Up: BEGIN/END
Enter node , (file) or (file)node

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 (Note:
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.  Note:
Command-Line Options, for more information on using library
functions.  Note: A Library of `awk' Functions, for
a number of useful library functions.

   If an `awk' program only has 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 end of file was seen.


automatically generated by info2www version 1.2.2.9