manpagez: man pages & more
info gawk
Home | html | info | man

gawk: Plain Getline

 
 4.10.1 Using 'getline' with No Arguments
 ----------------------------------------
 
 The 'getline' command can be used without arguments to read input from
 the current input file.  All it does in this case is read the next input
 record and split it up into fields.  This is useful if you've finished
 processing the current record, but want to do some special processing on
 the next record _right now_.  For example:
 
      # Remove text between /* and */, inclusive
      {
          if ((i = index($0, "/*")) != 0) {
              out = substr($0, 1, i - 1)  # leading part of the string
              rest = substr($0, i + 2)    # ... */ ...
              j = index(rest, "*/")       # is */ in trailing part?
              if (j > 0) {
                  rest = substr(rest, j + 2)  # remove comment
              } else {
                  while (j == 0) {
                      # get more text
                      if (getline <= 0) {
                          print("unexpected EOF or error:", ERRNO) > "/dev/stderr"
                          exit
                      }
                      # build up the line using string concatenation
                      rest = rest $0
                      j = index(rest, "*/")   # is */ in trailing part?
                      if (j != 0) {
                          rest = substr(rest, j + 2)
                          break
                      }
                  }
              }
              # build up the output line using string concatenation
              $0 = out rest
          }
          print $0
      }
 
    This 'awk' program deletes C-style comments ('/* ... */') from the
 input.  It uses a number of features we haven't covered yet, including
 string concatenation (⇒Concatenation) and the 'index()' and
 'substr()' built-in functions (⇒String Functions).  By replacing
 the 'print $0' with other statements, you could perform more complicated
 processing on the decommented input, such as searching for matches of a
 regular expression.  (This program has a subtle problem--it does not
 work if one comment ends and another begins on the same line.)
 
    This form of the 'getline' command sets 'NF', 'NR', 'FNR', 'RT', and
 the value of '$0'.
 
      NOTE: The new value of '$0' is used to test the patterns of any
      subsequent rules.  The original value of '$0' that triggered the
      rule that executed 'getline' is lost.  By contrast, the 'next'
      statement reads a new record but immediately begins processing it
      normally, starting with the first rule in the program.  ⇒Next
      Statement.
 
© manpagez.com 2000-2018
Individual documents may contain additional copyright information.