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

gawk: Increment Ops

 
 6.2.4 Increment and Decrement Operators
 ---------------------------------------
 
 "Increment" and "decrement operators" increase or decrease the value of
 a variable by one.  An assignment operator can do the same thing, so the
 increment operators add no power to the 'awk' language; however, they
 are convenient abbreviations for very common operations.
 
    The operator used for adding one is written '++'.  It can be used to
 increment a variable either before or after taking its value.  To
 "pre-increment" a variable 'v', write '++v'.  This adds one to the value
 of 'v'--that new value is also the value of the expression.  (The
 assignment expression 'v += 1' is completely equivalent.)  Writing the
 '++' after the variable specifies "post-increment".  This increments the
 variable value just the same; the difference is that the value of the
 increment expression itself is the variable's _old_ value.  Thus, if
 'foo' has the value four, then the expression 'foo++' has the value
 four, but it changes the value of 'foo' to five.  In other words, the
 operator returns the old value of the variable, but with the side effect
 of incrementing it.
 
    The post-increment 'foo++' is nearly the same as writing '(foo += 1)
 - 1'.  It is not perfectly equivalent because all numbers in 'awk' are
 floating point--in floating point, 'foo + 1 - 1' does not necessarily
 equal 'foo'.  But the difference is minute as long as you stick to
 numbers that are fairly small (less than 10e12).
 
    Fields and array elements are incremented just like variables.  (Use
 '$(i++)' when you want to do a field reference and a variable increment
 at the same time.  The parentheses are necessary because of the
 precedence of the field reference operator '$'.)
 
    The decrement operator '--' works just like '++', except that it
 subtracts one instead of adding it.  As with '++', it can be used before
 the lvalue to pre-decrement or after it to post-decrement.  Following is
 a summary of increment and decrement expressions:
 
 '++LVALUE'
      Increment LVALUE, returning the new value as the value of the
      expression.
 
 'LVALUE++'
      Increment LVALUE, returning the _old_ value of LVALUE as the value
      of the expression.
 
 '--LVALUE'
      Decrement LVALUE, returning the new value as the value of the
      expression.  (This expression is like '++LVALUE', but instead of
      adding, it subtracts.)
 
 'LVALUE--'
      Decrement LVALUE, returning the _old_ value of LVALUE as the value
      of the expression.  (This expression is like 'LVALUE++', but
      instead of adding, it subtracts.)
 
                        Operator Evaluation Order
 
      Doctor, it hurts when I do this!
      Then don't do that!
                            -- _Groucho Marx_
 
 What happens for something like the following?
 
      b = 6
      print b += b++
 
 Or something even stranger?
 
      b = 6
      b += ++b + b++
      print b
 
    In other words, when do the various side effects prescribed by the
 postfix operators ('b++') take effect?  When side effects happen is
 "implementation-defined".  In other words, it is up to the particular
 version of 'awk'.  The result for the first example may be 12 or 13, and
 for the second, it may be 22 or 23.
 
    In short, doing things like this is not recommended and definitely
 not anything that you can rely upon for portability.  You should avoid
 such things in your own programs.
 
© manpagez.com 2000-2018
Individual documents may contain additional copyright information.