home | O'Reilly's CD bookshelfs | FreeBSD | Linux | Cisco | Cisco Exam  

UNIX in a Nutshell: System V Edition

UNIX in a Nutshell: System V EditionSearch this book
Previous: 11.2 Conceptual Overview Chapter 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



  • 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 :


  3. Print first field of lines that contain 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:

    / { ++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 Overview UNIX in a Nutshell: System V Edition Next: 11.4 Awk System Variables
11.2 Conceptual Overview Book Index 11.4 Awk System Variables

The UNIX CD Bookshelf Navigation The UNIX CD BookshelfUNIX Power ToolsUNIX in a NutshellLearning the vi Editorsed & awkLearning the Korn ShellLearning the UNIX Operating System