Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum


Lines Club

Ищем достойных соперников.




Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

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() не имеет аргументов, то начальное значение производится из времени дня.


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют