Потоковый редактор awk

Утилита awk, GNU-версия которой называется gawk, предназначена для пото- кового редактирования текста и обладает специализированным языком про- граммирования для обработки табулированных данных. Она исходно разра- батывалась, как генератор отчетов.

Сценарий для awk в общем виде выглядит, как показано в примере 8.27.

 

Пример 8.27. Общий вид сценария awk

 

BEGIN

Команды формирования заголовка отчета

/шаблон/ { команды обработки строк } END

Команды формирования завершения отчета


Сценарий awk может состоять из трех частей:

r команды формирования заголовка — следуют после BEGIN;

r команды основного цикла обработки строк заключаются в фигурные скобки;

r команды формирования завершения отчета — следуют после END.

Команды могут находиться в файле сценария, имя которого должно быть указано после опции -f, либо может быть задано в качестве аргумента awk. Если шаблон для команды не указан, то обработке подвергаются все стро- ки. Если же, наоборот, шаблон задан, а команда — нет, то в stdout выводят- ся только строки, подходящие шаблону. Например, следующая команда выведет из файла /etc/passwd все строки, содержащие подстроку bash (при- мер 8.28).

 

Пример 8.28. Вывод строк по шаблону с помощью awk

 

$ awk /bash/ /etc/passwd

root:x:0:0:System Administrator:/root:/bin/bash user1:x:500:100::/home/user1:/bin/bash

 

В этом случае не было команды, но был задан шаблон — строка bash.

Теперь выведем только имя пользователей, использующих bash, и их UID. Для этого необходимо вывести первое и третье поле этого файла. Утилита awk позволяет обращаться к полям строк, разделенных с помощью пробелов или табуляций, следующим образом: $0 — вся строка, $1 — первое поле,

$2 — второе и т. д.

В нашем случае разделителем полей является двоеточие, поэтому данный символ надо указать после опции -F (пример 8.29).

 

Пример 8.29. Вывод требуемых полей

 

$ awk -F: '/bash/{print $1,$3}' /etc/passwd root 0

user1 500

 

Вывод требуемых полей обеспечивает команда print.

Для вывода только тех пользователей, чьи UID больше 100, можно отказаться от шаблона и профильтровать строки по условию $3>100 (пример 8.30).


 

Пример 8.30. Фильтрация по числовому значению

 

$ awk -F: '$3>100{print $1,$3}' /etc/passwd user1 500

 

Язык awk обладает собственными заранее определенными переменными и разрешает пользователю определять свои переменные. Одной из наиболее часто используемых встроенных переменных является NR — номер строки в потоке. Так, в предыдущем примере перед именами пользователей можно вывести номера строк, считанных из файла /etc/passwd (пример 8.31).

 

Пример 8.31. Переменная NR редактора awk

 

$ awk -F: '$3>100{print NR,$1,$3}' /etc/passwd

48 user1 500

 

Пример 8.32 демонстрирует, как можно получить список только тех файлов, длина имен которых больше 15 символов.

 

Пример 8.32. Фильтрация строк по длине

 

$ ls | awk 'length($0)>15'

 

Функция length() языка awk позволяет проверять длину строк. В данном случае фильтруются только те строки, длина которых больше 15 символов.

 








Дата добавления: 2015-06-12; просмотров: 1001;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.005 сек.