http://www.usf.uos.de/infoservice/doc/

(gawk.info)Ranges


Next: BEGIN/END Prev: Expression Patterns Up: Pattern Overview
Enter node , (file) or (file)node

Specifying Record Ranges with Patterns
--------------------------------------

   A "range pattern" is made of two patterns separated by a comma, of
the form `BEGPAT, ENDPAT'.  It matches ranges of consecutive input
records.  The first pattern, BEGPAT, controls where the range begins,
and the second one, ENDPAT, controls where it ends.  For example,

     awk '$1 == "on", $1 == "off"'

prints every record between `on'/`off' pairs, inclusive.

   A range pattern starts out by matching BEGPAT against every input
record; when a record matches BEGPAT, the range pattern becomes "turned
on".  The range pattern matches this record.  As long as it stays
turned on, it automatically matches every input record read.  It also
matches ENDPAT against every input record; when that succeeds, the
range pattern is turned off again for the following record.  Then it
goes back to checking BEGPAT against each record.

   The record that turns on the range pattern and the one that turns it
off both match the range pattern.  If you don't want to operate on
these records, you can write `if' statements in the rule's action to
distinguish them from the records you are interested in.

   It is possible for a pattern to be turned both on and off by the same
record, if the record satisfies both conditions.  Then the action is
executed for just that record.

   For example, suppose you have text between two identical markers (say
the `%' symbol) that you wish to ignore.  You might try to combine a
range pattern that describes the delimited text with the `next'
statement (not discussed yet, Note: The `next' Statement.
), which causes `awk' to skip any further processing of the
current record and start over again with the next input record. Such a
program would look like this:

     /^%$/,/^%$/    { next }
                    { print }

This program fails because the range pattern is both turned on and
turned off by the first line with just a `%' on it.  To accomplish this
task, you must write the program this way, using a flag:

     /^%$/     { skip = ! skip; next }
     skip == 1 { next } # skip lines with `skip' set

   Note that in a range pattern, the `,' has the lowest precedence (is
evaluated last) of all the operators.  Thus, for example, the following
program attempts to combine a range pattern with another, simpler test.

     echo Yes | awk '/1/,/2/ || /Yes/'

   The author of this program intended it to mean `(/1/,/2/) || /Yes/'.
However, `awk' interprets this as `/1/, (/2/ || /Yes/)'.  This cannot
be changed or worked around; range patterns do not combine with other
patterns.


Next: BEGIN/END Prev: Expression Patterns Up: Pattern Overview
[ Dokumentation lokal installierter Software ]