Вы можете выбрать определенные записи для печати или другой обработки с использованием простых шаблонов. awk имеет три вида шаблонов. Первое - это шаблоны, называемые выражениями отношений, которые проводят сравнения. Например, оператор "==" тестирует на равенство. Чтобы напечатать строки, для которых 4-е поле равно строке "Asia", можно использовать программу, состоящую из одного шаблона:
$4 == "Asia"
Если в качестве вводного файла взять countries, то получим:
USSR 8650 262 Asia China 3692 866 Asia India 1269 637 Asia
Для сравнения используются: >, >=, <, <=, ==, != (не равно). Сравниваться могут числа и строки. Например, из нашего файла мы хотим распечатать только страны, население которых более 100 млн. Для этого введем:
$3 > 100
Получим печать всех строк, в которых третье поле более 100.
В качестве шаблонов могут использоваться регулярные отношения, которые позволяют осуществлять поиск указанных символов для выбора записей. Простейшей формой регулярного отношения является строка символов, обрамленная наклонными чертами:
/US/
Эта программа печатает каждую строку, которая содержит буквы US. Если в качестве вводного файла взять countries, то получим:
USSR 8650 262 Asia USA 3615 219 North America
Третье - специальные шаблоны BEGIN и END могут использоваться для получения управления пред считыванием первой входной строки и после считывания последней. BEGIN должен быть первым шаблоном, а END - последним. Эта программа использует BEGIN для печати заголовка:
BEGIN {print "Countries of Asia:"} /Asia/ {print " ", $1}
На выходе получим:
Countries of Asia: USSR China India
В этом подразделе описаны встроенные и определенные пользователем переменные и функции простых действий.
Кроме чтения вводного файла и разбиения на поля, awk считает число считанных записей и число полей внутри текущей записи. Вы можете использовать эти счетчики в программе awk. Переменная NR - это номер текущей записи, NF - число полей в записи. Так программа:
{print NR, NF}
печатает номер каждой строки и число полей в этой записи. А программа:
{print NR, $0}
печатает каждую запись с соотвествующим номером в начале.
awk позволяет определять пользователям собственные переменные, которые можно использовать для хранения данных, выполнения арифметических действий. Для иллюстрации, подсчитаем общее количество населения и среднее значение из файла countries:
{sum = sum + $3} END {print "Общее количество населения", sum, "млн" {print "Среднее количество населения", NR, "стран", sum/NR}
Первым действием является накопление значений из третьего поля каждой строки; второе действие, выполняемое после последнего ввода, - напечатать сумму и среднее значение:
Общее количество населения 2201 млн Среднее количество населения 10 стран 220.1