(gawk.info.gz) Very Simple

Info Catalog (gawk.info.gz) Sample Data Files (gawk.info.gz) Getting Started (gawk.info.gz) Two Rules
 
 1.3 Some Simple Examples
 ========================
 
 The following command runs a simple `awk' program that searches the
 input file `BBS-list' for the character string `foo' (a grouping 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
 `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 ( Regexp).  The pattern is
 allowed to match parts of words.  There are single quotes around the
 `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 `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 previous example and the result would be the same:
 `awk' prints all lines matching the pattern `foo'.  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 `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 `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 `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:
 
    * Print the length of the longest input line:
 
           awk '{ if (length($0) > max) max = length($0) }
                END { print max }' data
 
    * Print every line that is longer than 80 characters:
 
           awk 'length($0) > 80' data
 
      The sole rule has a relational expression as its pattern and it
      has no action--so the default action, printing the record, is used.
 
    * Print the length of the longest line in `data':
 
           expand data | awk '{ if (x < length()) x = length() }
                         END { print "maximum line length is " x }'
 
      The input is processed by the `expand' utility to change TABs into
      spaces, so the widths compared are actually the right-margin
      columns.
 
    * Print every line that has at least one field:
 
           awk 'NF > 0' data
 
      This 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).
 
    * Print seven random numbers from 0 to 100, inclusive:
 
           awk 'BEGIN { for (i = 1; i <= 7; i++)
                            print int(101 * rand()) }'
 
    * Print the total number of bytes used by FILES:
 
           ls -l FILES | awk '{ x += $5 }
                             END { print "total bytes: " x }'
 
    * Print the total number of kilobytes used by FILES:
 
           ls -l FILES | awk '{ x += $5 }
              END { print "total K-bytes:", x / 1024 }'
 
    * Print a sorted list of the login names of all users:
 
           awk -F: '{ print $1 }' /etc/passwd | sort
 
    * Count the lines in a file:
 
           awk 'END { print NR }' data
 
    * Print the even-numbered lines in the data file:
 
           awk 'NR % 2 == 0' data
 
      If you use the expression `NR % 2 == 1' instead, the program would
      print the odd-numbered lines.
 
Info Catalog (gawk.info.gz) Sample Data Files (gawk.info.gz) Getting Started (gawk.info.gz) Two Rules
automatically generated by info2html