Переменные, выражения и присваивания
awk дает возможность выполнять арифметические вычисления и сохранять их результаты в переменных для последующего использования. В качестве примера рассмотрим вывод на печать плотности населения тех стран, информация о которых содержится в файле countries:
{ print $1 (1000000 * $3) / ($2 * 1000) }
(Напомним, что в этом файле население страны указано в миллионах человек, а площадь - в тысячах квадратных миль.) Результатом является количество людей, приходящееся на одну квадратную милю:
Russia 30.289 Canada 6.23053 China 234.561 USA 60.5809 Brazil 35.3013 Australia 4.71698 India 501.97 Argentina 24.2537 Sudan 19.6281 Algeria 19.5652
Формат у этой таблицы получился не очень красивым; если использовать вместо print оператор printf:
{ printf "%10s %6.1f\n", $1, (1000000*$3)/($2*1000) }
результат будет таким:
Russia 30.3 Canada 6.2 China 234.6 USA 60.6 Brazil 35.3 Australia 4.7 India 502.0 Argentina 24.3 Sudan 19.6 Algeria 19.6
Все промежуточные арифметические вычисления выполняются над вещественными числами. Допускаются следующие арифметические операции: +, -, *, /, % (остаток от деления).
Чтобы вычислить суммарное население и число стран из Азии, можно использовать программу
/Asia/ { pop += $3; ++n } END { print "total population of", n, "Asian countries is", pop }
которая печатает:
total population of 3 Asian countries is 1765
Операции ++, --, +=, -=, /=, *=, %= используются в awk'е так же, как в языке C. Операция ++, например, увеличивает значение переменной на единицу. Операции ++ и -- (как и в C) могут быть и префиксными, и постфиксными. Все эти операции можно использовать также и в выражениях.