Когда awk читает входную запись, она автоматически разделяется интерпретатором на части, называемые полями. По умолчанию, поля разделяются пробелами, как слова в строке. Пробел в строке awk означает один или более пробелов, знаков tabs или newlines; другие символы, такие как formfeed и пр., которые имеют смысл пробелов (whitespace) в других языках, в awk не считаются таковыми. Назначение полей --- облегчить доступ к соответствующим частям записи. Если вы не хотите этим пользоваться, вы можете оперировать с целой записью, но поля --- это то, что делает простые программы awk очень удобными. Для ссылки на поле в awk-пррограмме используют знак доллара,
`$', с номером нужного поля после него.
Так, $1 есть ссылка на первое поле,
$2 --- на второе и т.д.
Предположим, строка ввода есть:
This seems like a pretty nice example.
Здесь первое поле, или $1, есть `This';
второе поле, или $2, есть `seems'; и т.д.
Заметим, что последнее поле, $7, есть `example.'.
Так как нет пробела
между `e' и `.', точка входит состав седьмого поля.
Значение встроенной переменной NF есть количество полей в текущей записи. awk обновляет значение NF автоматически при каждом чтении записи. Независимо от количества полей, последнее поле записи может быть представлено как $NF. Таким образом, в предыдущем примере $NF будет то же, что и $7, т.е. `example.'. Как это работает, объясняется ниже (см. раздел 5.3 [Непостоянные номера полей], стр. 41). Если вы пытаетесь сослаться на поле после последнего, $8, когда запись имеет только 7 полей, вы получаете пустую цепочку.
В POSIX awk символы newline не рассматриваются как пробелы (whitespace) для разделения полей. $0, что выглядит как ссылка на " нулевое" поле, представляет специальный случай: она представляет всю входную запись. $0 используется, когда вы не заинтересованы в поляхs.
Приведем несколько примеров.
$ awk '$1 ~ /foo/ - print $0 ""' BBS-list
a fooey 555-1234 2400/1200/300 B
a foot 555-6699 1200/300 B
a macfoo 555-6480 1200/300 A
a sabafoo 555-2127 1200/300 C
Этот пример печатает каждую запись из файла `BBS-list', у которой первое поле содержит цепочку `foo'. Оператор `~' называется оператор соответствия (см. раздел 4.1 [Как использовать регулярные выражения], стр. 23); он проверяет соответствие цепочки (здесь это поле $1) данному регулярному выражению. Следующий пример ищет `foo' в целой записи и печатает первое и последнее поля каждой входной записи, удовлетворяющей такому соответствию:
$ awk '/foo/ - print $1, $NF ""' BBS-list
a fooey B
a foot B
a macfoo A
a sabafoo C