Язык awk использует привычные арифметические операторы при вычислении значений выражений. Все арифметические операторы имеют нормальные приоритеты и действуют естественным образом. Приведем файл `grades', содержащий список студенческих имен и по три оценки результатов тестов для каждого студента:
Pat 100 97 58 Sandy 84 72 93 Chris 72 92 89
Следующая программа читает файл `grades', и печатает средние значения оценок:
$ awk '- sum = $2 + $3 + $4 ;
avg = sum / 3 ? print $1, avg ""' grades
a Pat 85
a Sandy 83
a Chris 84.3333
В следующей таблице перечисляются арифметические операции в awk, в порядке уменьшения приоритетов:
- x
Отрицание
+ x
Одноместный плюс. Превращают выражение в число.
x ^ y или x ** y
Возведение в степень: x возводится в степень y.
`2 ^ 3'
имеет значение восемь. Цепочка `**' эквивалентна `^'. (Стандарт POSIX содержит только `^' для возведения в степень.)
x * y
Умножение.
x / y
Деление. Поскольку все числа в awk вещественные, то результат не округляется до целого: `3 / 4' имеет значение 0.75.
x % y
Остаток. Частное округляется в сторону нуля до целого, умножается на y и результат вычитается из x. Эта операция иногда называется "trunc-mod." Имеет место следующее тождество:
b * int(a / b) + (a % b) == a Один возможный нежелательный эффект такого определения остатка состоит в том, что x % y отрицательно, если x отрицательно. Так, -17 % 8 = -1 В других реализациях awk знак остатка может зависеть от конкретной машины.
x + y
Сложение.
x - y
Вычитание.
Для увеличения переносимости не употребляйте оператор `**'. Одноместные плюс и минус имеют одинаковый приоритет, операторы умножения все имеют одинаковый приоритет, сложение и вычитание имеют одинаковый приоритет.