Copyright (C) 2000-2012 |
GNU Info (gawk.info)Using BEGIN/ENDStartup 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 |