Команда getline без аргументов может использоваться для чтения из текущего входного файла. Все, что она делает в этом случае, состоит в чтении следующей входной записи и расчленении ее на поля. Это полезно, если вы закончили обработку текущей записи и хотите подвергнуть следующую запись какой-то специальной обработке.
Рассмотрим пример:
awk '-
if ((t = index($0, "/*")) != 0) -
# value will be "" if t is 1 tmp = substr($0, 1, t - 1) u = index
(substr($0, t + 2), "*/") while (u == 0) -
if (getline != 0) -
m = "unexpected EOF or error" m = (m ": " ERRNO) print m ? "/dev/stderr"
exit "" t = -1 u = index($0, "*/") "" # substr expression will be "" if */
# occurred at end of line $0 = tmp substr($0, t + u + 3) "" print $0 ""'
Эта awk-программа удаляет все комментарии Cи-типа, `/* ... */', из ввода. Посредством замены `print $0' другими операторами вы можете осуществить более сложную обработку ввода с удаленными комментариями, такую как поиск соответствий регулярному выражению. Эта программа имеет один недостаток --- она не работает, если один комментарий кончается, а другой начинается на той же строке.
Эта форма команды getline устанавливает NF (количество полей; см. раздел 5.2 [Обследование полей], стр. 40), NR (количество прочитанных пока записей; см. раздел 5.1 [Как ввод разделяется на записи, стр. 37), FNR (количество записей, прочитанных и текущего файла) и значение $0.
Замечание: новое значение $0 используется для проверки образцов любых последующих правил. Исходное значение $0, которое вызвало правило с выполнением getline, пропадает (d.c.). В отличие от этого, следующий оператор читает новую запись и немедленно начинает ее обработку нормальным образом, начиная с первого правила в программе. См. раздел 9.7 [Следующий оператор], стр.111.