Шаблоны BEGIN и END
10.7.1. Шаблоны BEGIN и END
BEGIN используется для получения управления перед считыванием первой вводной строки, так что любое действие для шаблона BEGIN выполняется один раз до того, как команда awk начинает считывать первую запись. END используется для получения управления после считывания последней вводной строки.
Следующая awk-программа использует BEGIN для установки в качестве разделителя символа табуляции (\t) и создания заголовков в выводном файле. Поле-разделитель хранится во встроенной переменной FS. Хотя FS может быть восстановлено в любом месте, благоразумнее поместить в секции BEGIN, до того как вводной файл начнет считываться. Второй printf в программе выполняется для каждой вводной строки и формирует выводной файл в виде таблицы, где вся информация располагается по колонкам с заголовками. END печатает результат. (Обратите внимание, что длинная строка может быть продолжена на другой строке после запятой). BEGIN { FS = "\t" printf "%10s %6s %5s %s\n", "COUNTRY", "AREA", "POP", "CONTINENT" } printf "%10s %6s %5s %s\n", $1, $2, $3, $4 area = area + $2; pop = pop + $3} END {printf "\n%10s %6d %5d\n", "TOTAL", area, pop }
Если в качестве вводного взять файл countries, то получим следующий результат: COUNTRY AREA POP CONTINENT USSR 8650 262 Asia Canada 3852 24 North America China 3692 866 Asia USA 3615 219 North America Brazil 3286 116 South America Australia 2968 14 Australia India 1269 637 Asia Argentina 1072 26 South America Sudan 968 19 Africa Algeria 920 18 Africa TOTAL 30292 2201