Go to the first, previous, next, last section, table of contents.


Using @command{gawk}'s nextfile Statement

@command{gawk} provides the nextfile statement, which is similar to the next statement. However, instead of abandoning processing of the current record, the nextfile statement instructs @command{gawk} to stop processing the current data file.

The nextfile statement is a @command{gawk} extension. In most other @command{awk} implementations, or if @command{gawk} is in compatibility mode (see section Command-Line Options), nextfile is not special.

Upon execution of the nextfile statement, FILENAME is updated to the name of the next data file listed on the command line, FNR is reset to one, ARGIND is incremented, and processing starts over with the first rule in the program. (ARGIND hasn't been introduced yet. See section Built-in Variables.) If the nextfile statement causes the end of the input to be reached, then the code in any END rules is executed. See section The BEGIN and END Special Patterns.

The nextfile statement is useful when there are many data files to process but it isn't necessary to process every record in every file. Normally, in order to move on to the next data file, a program has to continue scanning the unwanted records. The nextfile statement accomplishes this much more efficiently.

While one might think that `close(FILENAME)' would accomplish the same as nextfile, this isn't true. close is reserved for closing files, pipes, and coprocesses that are opened with redirections. It is not related to the main processing that @command{awk} does with the files listed in ARGV.

If it's necessary to use an @command{awk} version that doesn't support nextfile, see section Implementing nextfile as a Function, for a user-defined function that simulates the nextfile statement.

The current version of the Bell Laboratories @command{awk} (@pxref{Other Versions, ,Other Freely Available @command{awk} Implementations}) also supports nextfile. However, it doesn't allow the nextfile statement inside function bodies (see section User-Defined Functions). @command{gawk} does; a nextfile inside a function body reads the next record and starts processing it with the first rule in the program, just as any other nextfile statement.

Caution: Versions of @command{gawk} prior to 3.0 used two words (`next file') for the nextfile statement. In version 3.0, this was changed to one word, because the treatment of `file' was inconsistent. When it appeared after next, `file' was a keyword; otherwise, it was a regular identifier. The old usage is no longer accepted; `next file' generates a syntax error.


Go to the first, previous, next, last section, table of contents.