Next: Getline/Variable, Up: Getline [Contents][Index]
getline
with No ArgumentsThe 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 on the next record right now. For example:
# Remove text between /* and */, inclusive { if ((i = index($0, "/*")) != 0) { out = substr($0, 1, i - 1) # leading part of the string rest = substr($0, i + 2) # ... */ ... j = index(rest, "*/") # is */ in trailing part? if (j > 0) { rest = substr(rest, j + 2) # remove comment } else { while (j == 0) { # get more text if (getline <= 0) { print("unexpected EOF or error:", ERRNO) > "/dev/stderr" exit } # build up the line using string concatenation rest = rest $0 j = index(rest, "*/") # is */ in trailing part? if (j != 0) { rest = substr(rest, j + 2) break } } } # build up the output line using string concatenation $0 = out rest } print $0 }
This awk
program deletes C-style comments (‘/* …
*/’) from the input.
It uses a number of features we haven’t covered yet, including
string concatenation
(see Concatenation)
and the index()
and substr()
built-in
functions
(see String Functions).
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
, RT
, 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 executedgetline
is lost. By contrast, thenext
statement reads a new record but immediately begins processing it normally, starting with the first rule in the program. See Next Statement.
Next: Getline/Variable, Up: Getline [Contents][Index]