Страница 52 из 187
В качестве другого примера выполнения арифметических операций рассмотрим программу, подсчитывающую число страниц по 66 строк в каждой. Страницы получаются при прогоне несколько файлов через команду pr. Это можно оформить в виде команды prpages:
$ cat prpages
# prpages: подсчет числа страниц, выдаваемых pr
wc $* |
awk '!/total$/ { n += int(($1+55)/56) }
END { print n }'
$
Команда pr помещает на каждую страницу 56 строк текста (это число определяется эмпирически). Для каждой строки вывода команды wc, которая не содержит слово total в конце строки, число страниц округляется, а затем выделяется целая часть с помощью встроенной функции int.
$ wc ch4.*
753 3090 18129 ch4.1
612 2421 13242 ch4.2
637 2462 13455 ch4.3
802 2986 16904 ch4.4
50 213 1117 ch4.9
2854 11172 62847 total
$ prpages ch4.*
53
$
Для проверки этого результата запустим команды pr и awk одновременно:
$ pr ch4.* | awk 'END {print NR/66}'
53
$
Переменные программы awk могут также хранить строки символов. Рассматривать ли переменную как число или как строку символов — зависит от контекста. Грубо говоря, в арифметических выражениях типа s+=$1 используется числовое значение в контексте операций со строками типа x=="abc" — строковое значение в неясных случаях, например x>y, — строковое значение, если только операнды не являются явно числовыми. (Правила четко сформулированы в справочном руководстве по применению команды awk.) Строковые переменные инициируются пустой строкой. В последующих разделах строки будут активно использоваться.
В программе awk есть несколько своих встроенных переменных обоих типов, таких, как NR и FS. Их полный список приведен в табл. 4.3, а в табл. 4.4 перечислены операции, выполняемые командой.