A BEGIN
rule is executed, once, before the first input record
has been read. An END
rule is executed, once, after all the
input has been 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, as awk
does this
automatically (see section 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 they appear, all the BEGIN
rules at start-up 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 you to put the BEGIN
rule at the beginning of the
program, and the END
rule at the end, and only allowed one of
each. This is no longer required, but it is a good idea in terms of
program organization and readability.
Multiple BEGIN
and END
rules are useful for writing
library functions, since each library file can have its own BEGIN
and/or
END
rule to do its own initialization and/or cleanup. Note that
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 to write such rules in
library files so that the order in which they are executed doesn't matter.
See section Command Line Options, for more information on
using library functions.
See section 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 has been run.
(The original version of awk
used to keep reading and ignoring input
until end of file was seen.) However, if an END
rule exists,
then the input will be 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 (d.c.).
BEGIN
and END
rules must have actions; there is no default
action for these rules since there is no current record when they run.
Go to the first, previous, next, last section, table of contents.