Go to the first, previous, next, last section, table of contents.
The following command runs a simple @command{awk} program that searches the input file `BBS-list' for the character string `foo'. (A string of characters is usually called a string. The term string is based on similar usage in English, such as "a string of pearls," or, "a string of cars in a train."):
awk '/foo/ { print $0 }' BBS-list
When lines containing `foo' are found, they are printed because `print $0' means print the current line. (Just `print' by itself means the same thing, so we could have written that instead.)
You will notice that slashes (`/') surround the string `foo' in the @command{awk} program. The slashes indicate that `foo' is the pattern to search for. This type of pattern is called a regular expression, which is covered in more detail later (see section Regular Expressions). The pattern is allowed to match parts of words. There are single quotes around the @command{awk} program so that the shell won't interpret any of it as special shell characters.
Here is what this program prints:
$ awk '/foo/ { print $0 }' BBS-list
-| fooey 555-1234 2400/1200/300 B
-| foot 555-6699 1200/300 B
-| macfoo 555-6480 1200/300 A
-| sabafoo 555-2127 1200/300 C
In an @command{awk} rule, either the pattern or the action can be omitted, but not both. If the pattern is omitted, then the action is performed for every input line. If the action is omitted, the default action is to print all lines that match the pattern.
Thus, we could leave out the action (the print statement and the curly
braces) in the above example and the result would be the same: all
lines matching the pattern `foo' are printed. By comparison,
omitting the print statement but retaining the curly braces makes an
empty action that does nothing (i.e., no lines are printed).
Many practical @command{awk} programs are just a line or two. Following is a collection of useful, short programs to get you started. Some of these programs contain constructs that haven't been covered yet. (The description of the program will give you a good idea of what is going on, but please read the rest of the Info file to become an @command{awk} expert!) Most of the examples use a data file named `data'. This is just a placeholder; if you use these programs yourself, substitute your own file names for `data'. For future reference, note that there is often more than one way to do things in @command{awk}. At some point, you may want to look back at these examples and see if you can come up with different ways to do the same things shown here:
awk '{ if (length($0) > max) max = length($0) }
END { print max }' data
awk 'length($0) > 80' dataThe sole rule has a relational expression as its pattern and it has no action--so the default action, printing the record, is used.
expand data | awk '{ if (x < length()) x = length() }
END { print "maximum line length is " x }'
The input is processed by the @command{expand} utility to change tabs
into spaces, so the widths compared are actually the right-margin columns.
awk 'NF > 0' dataThis is an easy way to delete blank lines from a file (or rather, to create a new file similar to the old file but from which the blank lines have been removed).
awk 'BEGIN { for (i = 1; i <= 7; i++)
print int(101 * rand()) }'
ls -l files | awk '{ x += $5 }
END { print "total bytes: " x }'
ls -l files | awk '{ x += $5 }
END { print "total K-bytes: " (x + 1023)/1024 }'
awk -F: '{ print $1 }' /etc/passwd | sort
awk 'END { print NR }' data
awk 'NR % 2 == 0' dataIf you use the expression `NR % 2 == 1' instead, it would print the odd-numbered lines.
Go to the first, previous, next, last section, table of contents.