10.12. Действие
В выражении шаблон-действие, "действие" определяет то, что нужно выполнить с вводными записями, которые отобраны по шаблону. Достаточно часто "действие" - это печать каких-либо выражений, но также может быть комбинацией одного или более выражений.
Встроенные переменные
В табл. 23 приведены встроенные переменные, которые
поддерживает awk.
Таблица 23
Встроенные переменные
Переменная | Значение | Умолчание
|
---|
ARGC | Число аргументов команд ной строки | -
|
ARGV | Массив аргументовной строки командной строки | -
|
FILENAME | Имя текущего вводного файла | -
|
FNR | Номер записи в текущем файле | -
|
FS | Поле разделителя вводного файла | пробел и/или табуляция
|
FN | Число полей в текущей записи | -
|
NR | Число считанных на данный момент записей | -
|
OFMT | Выводной формат для цифр | %.6g
|
OFS | Разделитель поля выводного файла | пробел
|
ORS | Разделитель записи выводного поля | символ новой строки
|
RS | Разделитель записи вводного файла | то же
|
RSTART | Индекс первого выбранного символа при помощи match() | -
|
RLENGTH | Длина строки, выбранной при помощи match() | -
|
SUBSEP | Нижний разделитель | "\034"
|
10.12.1. Арифметические действия
В качестве действия могут использоваться уловные арифметические выражения, чтобы вычислить числовые значения. В качестве простого примера предположим, что нужно напечатать плотность населения для каждой страны в файле countries. Так как второе поле - это площадь в тысячах квадратных километров, а третье поле - это население в миллионах, то выражение:
100 * $3 / $2
дает плотность населения на 1 квадратный километр.
Программа:
{print "%10s %6.1f\n", $1,
1000 *$3 / $2}
печатает название страны и плотность населения:
USSR 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
Арифметические действия выполняются с плавающей точкой.
Арифметическими операторами являются:
+, -, *, /, %, ^
Арифметические выражения создаются при применении этих операторов над константами, переменными, именами полей, элементами массивов, функциями и другими выражениями. awk делает присвоения подобно присвоениям в языке программирования Си. Простейшей формой присвоения является:
v = e
где v - переменная или имя поля;
e - выражение.
Например, чтобы вычислить число стран континента "Asia" и общее количество населения, вы должны написать:
$4 == "Asia" { pop = pop = $3; n = n + 1 }
END { print "population of", n,
"Asian countries in million is", pop }
Относительно файла countries эта программа выдает
результат:
population of 3 Asian countries in
million is 1765
Действие, связанное с шаблоном $4 == "Asia" выполняет 2 назначения, одно - накопление населения и другое - подсчет стран.
Назначения в предыдущей программе могут быть записаны более сжато с использованием операторов "+=" и "++":
$4 == "Asia" {pop += $3; ++n}
Оператор "+=" заимствован из языка программирования Си,
следовательно:
pop += $3
аналогично:
pop = pop + $3
но оператор "+=" короче и работает быстрее.
Операторами назначения являются:
+=, -=, *=, /=, %=, ^=
Операторами приращения являются "++" и "--". Как и в языке Си они могут использоваться как префиксные (++x) или постфиксные (x++) операторы. Если x равно 1, то "i = ++x" увеличивает x, затем устанавливает i равным 2, в то время как "i = x++" устанавливает i равным 1, затем увеличивает x. Аналогичная интерпретация для префиксного и постфиксного операторов "--".
Операторы присвоения, увеличения и уменьшения могут использоваться в арифметических выражениях.
Мы используем установки по умолчанию в следующих программах, которые находят страны с наибольшим населением:
maxpop < $3 { maxpop = $3; country = $1 }
END { print country, maxpop }
Обратите внимание, что эта программа будет некорректна, если значение $3 будет отрицательным.
В табл. 24 перечислены встроенные арифметические
функции.
Таблица 24
Встроенные арифметические функции
Функция | Возвращаемое значение
|
---|
atan2(y,x) | Арктангенс y/x в пределах от "-пи" до "пи"
|
cos(x) | Косинус x
|
exp(x) | Экспоненциальная функция x
|
int(x) | Целая часть x с усеченными лидирующими нулями
|
log(x) | Натуральный логарифм x
|
rang() | Случайное число между 0 и 1
|
sin(x) | Синус x
|
sqrt(x) | Квадрат x
|
srand(x) | x - новое начальное значение для rand()
|
Функция rand() возвращает псевдослучайное число с плавающей точкой в диапазоне от 0 до 1, а srand(x) может быть использовано для установки нового начального значения генерирующей программы. Если srand() не имеет аргументов, то начальное значение производится из времени дня.
Назад | Содержание | Вперед