UNIX in a Nutshell: System V Edition

Previous: 11.2 Conceptual OverviewChapter 11
The Awk Scripting Language
Next: 11.4 Awk System Variables

11.3 Patterns and Procedures

Awk scripts consist of patterns and procedures:

pattern {procedure}

Both are optional. If pattern is missing, {procedure} is applied to all lines. If {procedure} is missing, the matched line is printed.

11.3.1 Patterns

A pattern can be any of the following:

/regular expression/

relational expression

pattern-matching expression

BEGIN

END

  • Expressions can be composed of quoted strings, numbers, operators, functions, defined variables, or any of the predefined variables described later under "Awk System Variables".

  • Regular expressions use the extended set of metacharacters and are described in Section 6.

  • In addition, ^ and $ can be used to refer to the beginning and end of a field, respectively, rather than the beginning and end of a line.

  • Relational expressions use the relational operators listed under "Operators" later in this section. Comparisons can be either string or numeric. For example, 2ドル > 1ドル selects lines for which the second field is greater than the first.

  • Pattern-matching expressions use the operators ~ (match) and !~ (don't match). See "Operators" later in this section.

  • The BEGIN pattern lets you specify procedures that will take place before the first input line is processed. (Generally, you set global variables here.)

  • The END pattern lets you specify procedures that will take place after the last input record is read.

Except for BEGIN and END, patterns can be combined with the Boolean operators || (or), && (and), and ! (not). A range of lines can also be specified using comma-separated patterns:

pattern,pattern

11.3.2 Procedures

Procedures consist of one or more commands, functions, or variable assignments, separated by newlines or semicolons, and contained within curly braces. Commands fall into four groups:

  • Variable or array assignments

  • Printing commands

  • Built-in functions

  • Control-flow commands

11.3.3 Simple Pattern-Procedure Examples

  1. Print first field of each line:

    { print 1ドル }

  2. Print all lines that contain pattern:

    /pattern/

  3. Print first field of lines that contain pattern:

    /pattern/{ print 1ドル }

  4. Select records containing more than two fields:

    NF > 2

  5. Interpret input records as a group of lines up to a blank line:

    BEGIN { FS = "\n"; RS = "" }

  6. Print fields 2 and 3 in switched order, but only on lines whose first field matches the string "URGENT":

    1ドル ~ /URGENT/ { print 3,ドル 2ドル }

  7. Count and print the number of pattern found:

    /pattern/ { ++x }
    END { print x }

  8. Add numbers in second column and print total:

    {total += 2ドル }; 
    END { print "column total is", total}

  9. Print lines that contain less than 20 characters:

    length < 20

  10. Print each line that begins with Name: and that contains exactly seven fields:

    NF == 7 && /^Name:/

  11. Reverse the order of fields:

    { for (i = NF; i >= 1; i-) print $i }


Previous: 11.2 Conceptual OverviewUNIX in a Nutshell: System V EditionNext: 11.4 Awk System Variables
11.2 Conceptual OverviewBook Index11.4 Awk System Variables

The UNIX CD Bookshelf Navigation

AltStyle によって変換されたページ (->オリジナル) /