В выражении шаблон-действие,
"действие" определяет то, что
нужно выполнить с вводными
записями, которые отобраны по
шаблону. Достаточно часто
"действие" - это печать
каких-либо выражений, но также
может быть комбинацией одного или
более выражений.
Встроенные переменные
В табл. 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() не имеет аргументов, то
начальное значение производится из
времени дня.
|