Gawk/BEGINFILE 002fENDFILE
Next: Empty, Previous: BEGIN/END, Up: Pattern Overview [Contents][Index]
7.1.5 The BEGINFILE and ENDFILE Special Patterns
This section describes a gawk-specific feature.
Two special kinds of rule, BEGINFILE and ENDFILE, give
you “hooks” into gawk’s command-line file processing loop.
As with the BEGIN and END rules
(see section The BEGIN and END Special Patterns),
all BEGINFILE rules in a program are merged, in the order they are
read by gawk, and all ENDFILE rules are merged as well.
The body of the BEGINFILE rules is executed just before
gawk reads the first record from a file. FILENAME
is set to the name of the current file, and FNR is set to zero.
The BEGINFILE rule provides you the opportunity to accomplish two tasks
that would otherwise be difficult or impossible to perform:
You can test if the file is readable. Normally, it is a fatal error if a file named on the command line cannot be opened for reading. However, you can bypass the fatal error and move on to the next file on the command line.
You do this by checking if the
ERRNOvariable is not the empty string; if so, thengawkwas not able to open the file. In this case, your program can execute thenextfilestatement (see section ThenextfileStatement). This causesgawkto skip the file entirely. Otherwise,gawkexits with the usual fatal error.- If you have written extensions that modify the record handling (by
inserting an “input parser”; see section Customized Input Parsers), you can invoke
them at this point, before
gawkhas started processing the file. (This is a very advanced feature, currently used only by thegawkextlibproject.)
The ENDFILE rule is called when gawk has finished processing
the last record in an input file. For the last input file,
it will be called before any END rules.
The ENDFILE rule is executed even for empty input files.
Normally, when an error occurs when reading input in the normal
input-processing loop, the error is fatal. However, if an ENDFILE
rule is present, the error becomes non-fatal, and instead ERRNO
is set. This makes it possible to catch and process I/O errors at the
level of the awk program.
The next statement (see section The next Statement) is not allowed inside
either a BEGINFILE or an ENDFILE rule. The nextfile
statement is allowed only inside a
BEGINFILE rule, not inside an ENDFILE rule.
The getline statement (see section Explicit Input with getline) is restricted inside
both BEGINFILE and ENDFILE: only redirected
forms of getline are allowed.
BEGINFILE and ENDFILE are gawk extensions.
In most other awk implementations, or if gawk is in
compatibility mode (see section Command-Line Options), they are not special.
Next: Empty, Previous: BEGIN/END, Up: Pattern Overview [Contents][Index]