# Arithmetic Ops (The GNU Awk User’s Guide)

Next: Concatenation, Up: All Operators [Contents][Index]

#### 6.2.1 Arithmetic Operators

The `awk`

language uses the common arithmetic operators when evaluating expressions. All of these arithmetic operators follow normal precedence rules and work as you would expect them to.

The following example uses a file named `grades`

, which contains a list of student names as well as three test scores per student (it’s a small class):

Pat 100 97 58 Sandy 84 72 93 Chris 72 92 89

This program takes the file `grades`

and prints the average of the scores:

$ awk '{ sum = $2 + $3 + $4 ; avg = sum / 3 > print $1, avg }' grades -| Pat 85 -| Sandy 83 -| Chris 84.3333

The following list provides the arithmetic operators in `awk`

, in order from the highest precedence to the lowest:

`x ^ y`

`x ** y`

Exponentiation; `x`

raised to the `y`

power. ‘`2 ^ 3`

’ has the value eight; the character sequence ‘`**`

’ is equivalent to ‘`^`

’. (c.e.)

`- x`

Negation.

`+ x`

Unary plus; the expression is converted to a number.

`x * y`

Multiplication.

`x / y`

Division; because all numbers in `awk`

are floating-point numbers, the result is *not* rounded to an integer—‘`3 / 4`

’ has the value 0.75. (It is a common mistake, especially for C programmers, to forget that *all* numbers in `awk`

are floating point, and that division of integer-looking constants produces a real number, not an integer.)

`x % y`

Remainder; further discussion is provided in the text, just after this list.

`x + y`

Addition.

`x - y`

Subtraction.

Unary plus and minus have the same precedence, the multiplication operators all have the same precedence, and addition and subtraction have the same precedence.

When computing the remainder of ‘`x % y`

’, the quotient is rounded toward zero to an integer and multiplied by `y`

. This result is subtracted from `x`

; this operation is sometimes known as “trunc-mod.” The following relation always holds:

b * int(a / b) + (a % b) == a

One possibly undesirable effect of this definition of remainder is that ‘`x % y`

’ is negative if `x`

is negative. Thus:

-17 % 8 = -1

In other `awk`

implementations, the signedness of the remainder may be machine-dependent.

NOTE:The POSIX standard only specifies the use of ‘`^`

’ for exponentiation. For maximum portability, do not use the ‘`**`

’ operator.

Next: Concatenation, Up: All Operators [Contents][Index]