Готовый перевод sed & awk / sed & awk: 2.4 Использование awk
Аналогично sed, awk исполняет набор инструкций для каждой входной строки. Вы можете указать инструкции в командной строке или создать скрипт
2.4.1 Запуск awk
Синтаксис командной строки следующий:
awk 'инструкции' файл
На вход читаются строки из одного или нескольких файлов или со страндартного входа. Инструкции должны быть выделелны одинарными кавычками для защиты их от шелла. (Инструкции почти всегда содержат фигурные скобки и/или знак доллара, которые интерпретируются шеллом как специальные символы.) Множественные строки команд могут быть введены так же, как и в sed: с разделением команд через точку с запятой или используя совместимость с многострочным вводом в Bourne shell.
Программа awk обычно помещается в файл, гдк она может быть протестирована и изменена. Синтаксис вызова awk с файлом скрипта следующий:
awk -f скрипт файлы
Опция -f работает так же как и в sed.
В то время как инструкции awk имеют такую же структуру как sed, содержат шаблоны и разделы процедур, сами процедуры довольно различны. Здесь awk менее похож на текстовый радактор и более на язык программирования. Здесь операторы и функции вместо одно- или двух-символьных последовательностей команд. Для примера, Вы оператор print для печати значений выражения или для печати содержания текущей строки.
Awk, в обычном случае, интерпретирует каждую входную строку как запись и каждое слово, как строку, разделенные пробелами или табами, как поля. (Это правило может быть изменено.) Один или несколько последовательных пробелов или табов считаются как один разделитель. Awk позволяет Вам ссылаться на эти поля в шаблонах или процедурах. $0 представляет всю входную строку. $1, $2, ... ссылаются на отдельные поля во входной строк. Awk разделяет входные записи до обработки скриптом. Давайте рассмотрим несколько примеров, используя прострой входной файл список.
Первый пример содержит одиночную инструкцию, которая печатает первое поле каждой строки во входном файле.
$ awk '{ print $1 }' list
John
Alice
Orville
Terry
Eric
Hubert
Amy
Sal
"$1" указывает на значение первого поля в каждой строк. Т.к. шаблон не указан, то оператор печати применяется ко всем строкам. В следующем примере шаблон "/MA/" указан, но без процедуры. Действием по-умолчанию является печать каждой строки, удовлетворяютщей шаблону.
$ awk '/MA/' list
John Daggett, 341 King Road, Plymouth MA
Eric Adams, 20 Post Road, Sudbury MA
Sal Carpenter, 73 6th Street, Boston MA
Три строки были напечатаны. Как было упомянуто в первой главе, awk может быть использован как язык запросов, для извлечения нужной информации из файлов. Мы можем сказать, что шаблон помещенный в условие выбора записей будет включет в отчет, а именно они должны содержать строки "MA". Сейчас мы можем, так же, указать какую часть записей включать в отчет. Следующий пример использует оператор печати для ограничения вывода до первого поля каждой записи.
$ awk '/MA/ { print $1 }' list
John
Eric
Sal
Для помощи в понимании выше указанных инструкций мы попробуем прочитать это вслух: Печатать первое слово в каждой строке, содержащей строку "МА". Мы можем сказать"слово" потому, что по-умолчанию awk разделяет входные поля пробелами или табами.
В следующем примере, мы используем опцию -F для изменения разделителя полей. Это позволяет нам запросить любые три поля: полное имя, адрес, или город и штат.
$ awk -F, '/MA/ { print $1 }' list
John Daggett
Eric Adams
Sal Carpenter
Не путайтесь, -F опция меняет разделитель полей, а опция -f указывает имя файла скрипта.
В следующем примере, мы напечатаем каждое поле в отдельной строке. Множественные команды отделяются через точку с запятой.
awk -F, '{ print $1; print $2; print $3 }' list
John Daggett
341 King Road
Plymouth MA
Alice Ford
22 East Broadway
Richmond VA
Orville Thomas
11345 Oak Bridge Road
Tulsa OK
Terry Kalkas
402 Lans Road
Beaver Falls PA
Eric Adams
20 Post Road
Sudbury MA
Hubert Sims
328A Brook Road
Roanoke VA
Amy Wilde
334 Bayshore Pkwy
Mountain View CA
Sal Carpenter
73 6th Street
Boston MA
Наши примеры используют измененные в sed данные в качестве входных. Наши примеры используют awk для перестроения данных. В предыдущих примерах awk, обратите внимение как текущее поле сейчас содержит часть второго и третьего полей.
2.4.2 Сообщения об ошибках
Каждая реализация awk выдает Вам разные сообщения об ошибках, когда они возникают в Ваших программах. Таким образом, мы не хотим цитировать конкретные версии сообщений; это будет очевидно, когда будет проблема. Сообщения могут появляться по следующим причинам:
Процедура не выделена фигурными скобками ({})
Инструкция не окружена одиночными кавычками ('')
Регулярное выражение не ограждено слешами (//)
2.4.3 Резюме по опциям
Таблица 2.2 сводка опций командной строки awk.
Опция
Пояснение
-f Далее следует имя скрипта
-F Далее следует разделитель полей
-v var=значение
Таблица 2.2 Опции командной строки awk
Опция -v указывает параметры, которые будут обсуждены в главе 7, Написание скриптов awk.
Внимание! Этот перевод, возможно, ещё не готов.
Его статус: перевод редактируется
Переведено на Нотабеноиде
http://notabenoid.org/book/32181/114522
Переводчики: r0mk
Настройки
Готово:
