awk поддерживает функции, определенные пользователем:
function имя( список_аргументов) { операторы }
Это определение может появляться в любом месте, где возможен оператор "шаблон-действие". Список аргументов - это список имен переменных, разделенных запятыми. Внутри тела функции эти переменные ссылаются на действительные переменные при вызове функции. Между именем функции и левой круглой скобкой не должно быть пробела, иначе это будет означать конкатенацию.
Массив элементов просматривается при обращении, как и в Си. Функция при просмотре не может изменить значение скалярных аргументов. Внутри функции формальные параметры являются локальными переменными, но все другие переменные являются глобальными. У вас может быть любое количество формальных параметров, которые используются только как локальные переменные. Оператор return является необязательным, но если он отсутствует, возвращаемое значение будет неопределенным.
В программе awk могут присутствовать комментарии. Они начинаются с символа # и заканчиваются символом новой строки:
print x,y # это комментарий
Операторы обычно занимают одну строку. Несколько операторов могут располагаться на одной строке, тогда они должны разделяться точкой с запятой. Длинный оператор может располагаться на нескольких строках, причем каждая продолжаемая строка должна заканчиваться символом "\". Нельзя продолжить строку вида "....". Такое продолжение встречается редко, однако как только строка заканчивается запятой, операторы продолжаются автоматически. Примером этого служат операторы print и printf, и такое возможно после операторов "&&" и "||". Несколько операторов "шаблон-действие" могут появляться на одной строке, если они разделены точкой с запятой.
Операторы print и printf являются простейшими конструкциями, которые генерируют вывод. Оператор print используется для образования просто вывода; printf - для форматируемого вывода. Подобно shell awk позволяет вам перенаправлять вывод в файл или в канал.
Оператор:
печатает строки каждого выражения, разделенные при помощи разделителей полей и следующими за ними разделителями записей.
Оператор:
print
является сокращенной формой оператора:
print $0
Чтобы напечатать пустую строку, введите:
print ""
Разделители полей выводного файла и разделители записей хранятся в строковых переменных OFS и ORS. Первоначально значение OFS устанавливается как один пробел и ORS - один символ новой строки, но эти значения могут быть изменены в любой момент времени. Например, следующая программа печатает первое и второе поле каждой записи, имеющее двоеточие между полями и два символа новой строки после второго поля.
BEGIN { OFS = ":"; ORS = "\n\n" }
{ print $1, $2 }
Обратите внимание, что :
{ print $1 $2 }
печатает первое и второе поле без разделителя полей вводного файла.
Оператор printf, используемый в awk, подобен этому оператору в Си, за исключением того, что спецификатор * не поддерживается.