sed & awk / sed & awk: 2.4 Использование awk

Оглавление
← →
Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Аналогично sed, awk исполняет набор инструкций для каждой входной строки. Вы можете указать инструкции в командной строке или создать скрипт

r0mk 01.10.12 в 06:13

0

2.4.1 Запуск awk

r0mk 01.10.12 в 06:13

0

Синтаксис командной строки следующий:

r0mk 01.10.12 в 06:14

0

awk 'инструкции' файл

r0mk 01.10.12 в 06:14

0

На вход читаются строки из одного или нескольких файлов или со страндартного входа. Инструкции должны быть выделелны одинарными кавычками для защиты их от шелла. (Инструкции почти всегда содержат фигурные скобки и/или знак доллара, которые интерпретируются шеллом как специальные символы.) Множественные строки команд могут быть введены так же, как и в sed: с разделением команд через точку с запятой или используя совместимость с многострочным вводом в Bourne shell.

r0mk 01.10.12 в 06:43

0

Программа awk обычно помещается в файл, гдк она может быть протестирована и изменена. Синтаксис вызова awk с файлом скрипта следующий:

r0mk 01.10.12 в 06:44

0

awk -f скрипт файлы

r0mk 01.10.12 в 06:44

0

Опция -f работает так же как и в sed.

r0mk 01.10.12 в 06:53

0

В то время как инструкции awk имеют такую же структуру как sed, содержат шаблоны и разделы процедур, сами процедуры довольно различны. Здесь awk менее похож на текстовый радактор и более на язык программирования. Здесь операторы и функции вместо одно- или двух-символьных последовательностей команд. Для примера, Вы оператор print для печати значений выражения или для печати содержания текущей строки.

r0mk 01.10.12 в 07:03

0

Awk, в обычном случае, интерпретирует каждую входную строку как запись и каждое слово, как строку, разделенные пробелами или табами, как поля. (Это правило может быть изменено.) Один или несколько последовательных пробелов или табов считаются как один разделитель. Awk позволяет Вам ссылаться на эти поля в шаблонах или процедурах. $0 представляет всю входную строку. $1, $2, ... ссылаются на отдельные поля во входной строк. Awk разделяет входные записи до обработки скриптом. Давайте рассмотрим несколько примеров, используя прострой входной файл список.

r0mk 01.10.12 в 07:39

0

Первый пример содержит одиночную инструкцию, которая печатает первое поле каждой строки во входном файле.

r0mk 01.10.12 в 07:40

0

$ awk '{ print $1 }' list

r0mk 01.10.12 в 07:40

0

John

r0mk 01.10.12 в 07:40

0

Alice

r0mk 01.10.12 в 07:40

0

Orville

r0mk 01.10.12 в 07:40

0

Terry

r0mk 01.10.12 в 07:40

0

Eric

r0mk 01.10.12 в 07:40

0

Hubert

r0mk 01.10.12 в 07:41

0

Amy

r0mk 01.10.12 в 07:41

0

Sal

r0mk 01.10.12 в 07:41

0

"$1" указывает на значение первого поля в каждой строк. Т.к. шаблон не указан, то оператор печати применяется ко всем строкам. В следующем примере шаблон "/MA/" указан, но без процедуры. Действием по-умолчанию является печать каждой строки, удовлетворяютщей шаблону.

r0mk 01.10.12 в 07:51

0

$ awk '/MA/' list

r0mk 01.10.12 в 07:51

0

John Daggett, 341 King Road, Plymouth MA

r0mk 01.10.12 в 07:52

0

Eric Adams, 20 Post Road, Sudbury MA

r0mk 01.10.12 в 07:52

0

Sal Carpenter, 73 6th Street, Boston MA

r0mk 01.10.12 в 07:52

0

Три строки были напечатаны. Как было упомянуто в первой главе, awk может быть использован как язык запросов, для извлечения нужной информации из файлов. Мы можем сказать, что шаблон помещенный в условие выбора записей будет включет в отчет, а именно они должны содержать строки "MA". Сейчас мы можем, так же, указать какую часть записей включать в отчет. Следующий пример использует оператор печати для ограничения вывода до первого поля каждой записи.

r0mk 01.10.12 в 07:57

0

$ awk '/MA/ { print $1 }' list

r0mk 01.10.12 в 07:52

0

John

r0mk 01.10.12 в 09:05

0

Eric

r0mk 01.10.12 в 09:05

0

Sal

r0mk 01.10.12 в 09:05

0

Для помощи в понимании выше указанных инструкций мы попробуем прочитать это вслух: Печатать первое слово в каждой строке, содержащей строку "МА". Мы можем сказать"слово" потому, что по-умолчанию awk разделяет входные поля пробелами или табами.

r0mk 01.10.12 в 09:29

0

В следующем примере, мы используем опцию -F для изменения разделителя полей. Это позволяет нам запросить любые три поля: полное имя, адрес, или город и штат.

r0mk 01.10.12 в 09:30

0

$ awk -F, '/MA/ { print $1 }' list

r0mk 01.10.12 в 09:31

0

John Daggett

r0mk 01.10.12 в 09:31

0

Eric Adams

r0mk 01.10.12 в 09:31

0

Sal Carpenter

r0mk 01.10.12 в 09:31

0

Не путайтесь, -F опция меняет разделитель полей, а опция -f указывает имя файла скрипта.

r0mk 01.10.12 в 09:37

0

В следующем примере, мы напечатаем каждое поле в отдельной строке. Множественные команды отделяются через точку с запятой.

r0mk 01.10.12 в 09:38

0

awk -F, '{ print $1; print $2; print $3 }' list

r0mk 01.10.12 в 09:38

0

John Daggett

r0mk 01.10.12 в 09:38

0

341 King Road

r0mk 01.10.12 в 09:38

0

Plymouth MA

r0mk 01.10.12 в 09:39

0

Alice Ford

r0mk 01.10.12 в 09:39

0

22 East Broadway

r0mk 01.10.12 в 09:39

0

Richmond VA

r0mk 01.10.12 в 09:39

0

Orville Thomas

r0mk 01.10.12 в 09:39

0

11345 Oak Bridge Road

r0mk 01.10.12 в 09:39

0

Tulsa OK

r0mk 01.10.12 в 09:39

0

Terry Kalkas

r0mk 01.10.12 в 09:39

0

402 Lans Road

r0mk 01.10.12 в 09:40

0
Минутку...

Следующая страница →