[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
getline
with No Arguments
The getline
command can be used without arguments to read input
from the current input file. All it does in this case is read the next
input record and split it up into fields. This is useful if you've
finished processing the current record, but want to do some special
processing right now on the next record. Here's an
example:
{ if ((t = index($0, "/*")) != 0) { # value of `tmp' will be "" if t is 1 tmp = substr($0, 1, t - 1) u = index(substr($0, t + 2), "*/") while (u == 0) { if (getline <= 0) { m = "unexpected EOF or error" m = (m ": " ERRNO) print m > "/dev/stderr" exit } t = -1 u = index($0, "*/") } # substr expression will be "" if */ # occurred at end of line $0 = tmp substr($0, u + 2) } print $0 } |
This awk
program deletes all C-style comments (`/* ...
*/') from the input. By replacing the `print $0' with other
statements, you could perform more complicated processing on the
decommented input, such as searching for matches of a regular
expression. (This program has a subtle problem--it does not work if one
comment ends and another begins on the same line.)
This form of the getline
command sets NF
,
NR
, FNR
, and the value of $0
.
Note: The new value of $0
is used to test
the patterns of any subsequent rules. The original value
of $0
that triggered the rule that executed getline
is lost.
By contrast, the next
statement reads a new record
but immediately begins processing it normally, starting with the first
rule in the program. See section The next
Statement.