DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(gawk.info) Statements/Lines

Info Catalog (gawk.info) More Complex (gawk.info) Getting Started (gawk.info) Other Features
 
 `awk' Statements Versus Lines
 =============================
 
    Most often, each line in an `awk' program is a separate statement or
 separate rule, like this:
 
      awk '/12/  { print $0 }
           /21/  { print $0 }' BBS-list inventory-shipped
 
    However, `gawk' will ignore newlines after any of the following:
 
      ,    {    ?    :    ||    &&    do    else
 
 A newline at any other point is considered the end of the statement.
 (Splitting lines after `?' and `:' is a minor `gawk' extension.  The
 `?' and `:' referred to here is the three operand conditional
 expression described in  Conditional Expressions Conditional Exp.)
 
    If you would like to split a single statement into two lines at a
 point where a newline would terminate it, you can "continue" it by
 ending the first line with a backslash character, `\'.  The backslash
 must be the final character on the line to be recognized as a
 continuation character.  This is allowed absolutely anywhere in the
 statement, even in the middle of a string or regular expression.  For
 example:
 
      awk '/This regular expression is too long, so continue it\
       on the next line/ { print $1 }'
 
 We have generally not used backslash continuation in the sample programs
 in this Info file.  Since in `gawk' there is no limit on the length of
 a line, it is never strictly necessary; it just makes programs more
 readable.  For this same reason, as well as for clarity, we have kept
 most statements short in the sample programs presented throughout the
 Info file.  Backslash continuation is most useful when your `awk'
 program is in a separate source file, instead of typed in on the
 command line.  You should also note that many `awk' implementations are
 more particular about where you may use backslash continuation. For
 example, they may not allow you to split a string constant using
 backslash continuation.  Thus, for maximal portability of your `awk'
 programs, it is best not to split your lines in the middle of a regular
 expression or a string.
 
    *Caution: backslash continuation does not work as described above
 with the C shell.*  Continuation with backslash works for `awk'
 programs in files, and also for one-shot programs _provided_ you are
 using a POSIX-compliant shell, such as the Bourne shell or Bash, the
 GNU Bourne-Again shell.  But the C shell (`csh') behaves differently!
 There, you must use two backslashes in a row, followed by a newline.
 Note also that when using the C shell, _every_ newline in your awk
 program must be escaped with a backslash. To illustrate:
 
      % awk 'BEGIN { \
      ?   print \\
      ?       "hello, world" \
      ? }'
      -| hello, world
 
 Here, the `%' and `?' are the C shell's primary and secondary prompts,
 analogous to the standard shell's `$' and `>'.
 
    `awk' is a line-oriented language.  Each rule's action has to begin
 on the same line as the pattern.  To have the pattern and action on
 separate lines, you _must_ use backslash continuation--there is no
 other way.
 
    Note that backslash continuation and comments do not mix. As soon as
 `awk' sees the `#' that starts a comment, it ignores _everything_ on
 the rest of the line. For example:
 
      $ gawk 'BEGIN { print "dont panic" # a friendly \
      >                                    BEGIN rule
      > }'
      error--> gawk: cmd. line:2:                BEGIN rule
      error--> gawk: cmd. line:2:                ^ parse error
 
 Here, it looks like the backslash would continue the comment onto the
 next line. However, the backslash-newline combination is never even
 noticed, since it is "hidden" inside the comment. Thus, the `BEGIN' is
 noted as a syntax error.
 
    When `awk' statements within one rule are short, you might want to
 put more than one of them on a line.  You do this by separating the
 statements with a semicolon, `;'.
 
    This also applies to the rules themselves.  Thus, the previous
 program could have been written:
 
      /12/ { print $0 } ; /21/ { print $0 }
 
 with a semicolon was not in the original `awk' language; it was added
 for consistency with the treatment of statements within an action.
 
Info Catalog (gawk.info) More Complex (gawk.info) Getting Started (gawk.info) Other Features
automatically generated byinfo2html