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


Linux in a NutshellLinux in a NutshellSearch this book

13.2. Patterns and Procedures

gawk scripts consist of patterns and procedures:

pattern {procedure}

Both are optional. If pattern is missing, {procedure} is applied to all records. If {procedure} is missing, the matched record is printed. By default, each line of input is a record, but you can specify a different record separator through the RS variable.

13.2.1. Patterns

A pattern can be any of the following:

/regular expression/
relational expression
pattern-matching expression
pattern,pattern
BEGIN
END

Some rules regarding patterns include:

Except for BEGIN and END, patterns can be combined with the Boolean operators || (OR), && (AND), and ! (NOT).

In addition to other regular-expression operators, GNU gawk supports POSIX character lists, which are useful for matching non-ASCII characters in languages other than English. These lists are recognized only within [ ] ranges. A typical use is [[:lower:]], which in English is the same as [a-z]. See Chapter 9 for a complete list of POSIX character lists.

13.2.3. Simple Pattern/Procedure Examples

  1. Print first field of each line (no pattern specified):

    { print $1 }
  2. Print all lines that contain "Linux":

    /Linux/
  3. Print first field of lines that contain "Linux":

    /Linux/{ print $1 }
  4. Print records containing more than two fields:

    NF > 2
  5. Interpret each group of lines up to a blank line as a single input record:

    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 instances of "ERR" found:

    /ERR/ { ++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 fewer 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 }


Library Navigation Links

Copyright © 2003 O'Reilly & Associates. All rights reserved.