Готовый перевод 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

Настройки

Готово:

100.00% КП = 1.0