Язык gawk поддерживает полный набор арифметических операторов, обеспечивающих выполнение операций сложения, вычитания, умножения, деления, а также деления с остатком. Арифметические операторы аналогичны операторам языка программирования С. Все эти операторы, а также операторы присваивания перечислены в табл. 2.
В gawk существует возможность выполнять арифметические вычисления над значениями, заданными числовыми шаблонами. Числовой шаблон представляет собой последовательность цифр. Примерами шаблона могут служить арифметическая константа или поле, содержимым которого являются числа. Арифметические константы, переменные полей, а также определяемые пользователем переменные, значения которых представляют числовые шаблоны, могут использоваться в качестве операндов арифметических операций. Существует также ряд встроенных числовых переменных gawk, например NR, определяющая номер текущей записи, и NF, задающая количество полей в текущей записи. Такие переменные могут применяться и в качестве арифметических операндов.
Арифметические операции обычно вводятся в сегменте действия или шаблона инструкции gawk. В следующем примере выводятся все четные строки. Знак процента (%) представляет собой оператор деления по модулю, результатом выполнения которого является остаток от деления на число. Если остаток от деления номера строки на 2 равен нулю, значит, номер строки четный. Обратите внимание, каким образом скобки изменяют порядок выполнения операторов в выражении.
$ gawk '(NR % 2) ==0 {print NR, $0}' books
2 Cristmas Dickens 3.50 Academic {
4 Raven Рое 2.50 Penguin
Арифметические операторы и переменные позволяют выполнять вычисления над значениями полей таблиц, хранящихся в базе данных. Например, сумму значений в заданном столбце можно вычислить так, как это делается в электронной таблице. Рассмотрим пример, в котором суммируются значения третьего столбца таблицы из файла books. Суммируемое значение присваивается переменной tot, определенной пользова-' телем. Для вывода на печать итогового значения tot используется специальный шаблон END. При этом считается, что значение переменной tot при инициализации автоматически устанавливается равным 0.
$ gawk '{print; tot = tot + $3} END {print "Total=",tot}' books
Tempest Shakespeare 15.75 Penguin
Christmas Dickens 3.50 Academic
Iliad Homer 10.25 Random
Raven Рое 2.50 Penguin Total= 32
Наряду со стандартными арифметическими операторами в gawk применяются составные арифметические операторы присваивания. Составные операторы представляют собой комбинацию арифметических операторов и операторов присваивания. Они используются для сокращенной записи операции присваивания, когда в переменной сохраняется результат вычисления выражения, в котором применяется эта же переменная. Например, операция tot = tot + 1 может записываться с помощью составного арифметического оператора += в виде tot += 1. В данном случае в арифметическом выражении переменную tot указывать не требуется, поскольку само применение составного арифметического оператора += уже предполагает ее наличие. Аналогичным образом, и оператор i = i * 2 может быть записан с применением составного арифметического оператора *= в виде i *= 2. Результат выполнения приведенной ниже команды такой же, как и в предыдущем примере:
$ gawk '{print; tot += $3} END {print "Total=", tot)’ books