Руководство пользователя для GNU Awk
5. Чтение входных файлов
5.5.5 Обзор правил разделения на поля
В соответствии со стандартом POSIX, awk должен вести себя так, как будто каждая запись разделяется на поля во время ее чтения. В частности, это означает, что можно менять значение FS после прочтения записи, и значения полей (т.е., как они были выделены) должны соответствовать старому значению FS, а не новому. Однако, многие реализации awk действуют не так. Вместо этого они откладывают выделение полей до ссылки на поле. Поля выделяются согласно текущему значению FS! (d.c.) Такое поведение может быть трудно диагнозируемым. Следующий пример иллюстрирует разницу между этими двумя методами. (Команда sed печатает первую строку из `/etc/passwd'. Утилита sed является "поточным редактором". Ее поведение также определяется стандартом POSIX.)
sed 1q /etc/passwd -- awk '- FS = ":" ;
print $1 ""'
будет обычно печатать
root on an incorrect implementation of awk
в то время как gawk напечатает что-нибудь вроде
root:nSijPlPhZZwgE:0:0:Root:/:
В следующей таблице указывается, как выделяются поля на основании значения переменной FS. (`==' означает "равно следующему.") FS == " " Поля разделяются белыми пробелами. Ведущие и завершающие белые пробелы игнорируются. Это же делается по умолчанию.
FS == любой другой отдельный символ. Поля разделяются каждым вхождением этого символа. Кратные последовательные вхождения ограничивают пустые поля, так же как ведущее и завершающее запись вхождения. Этот символ может также быть метасимволом регулярного выражения; его представление не нуждается в управляющей последовательности.
FS == регулярное выражение. Поля разделяются вхождениями символов, которые соответствуют регулярному выражению. Ведущее и завершающее вхождения отделяют пустые поля. FS == "" . Каждый отдельный символ в записи становится отдельным полем.
Назад | Вперед
Содержание (общее) | Содержание раздела | Содержание подраздела
Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:
|