· С помощью sed получите список только тех процессов, которые связаны с каким-либо терминалом (фильтр по строкам pts и tty).
· В полученном списке процессов с помощью sed замените все строки user
на provider.
Потоковый редактор 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).
В этом случае не было команды, но был задан шаблон — строка bash.
Теперь выведем только имя пользователей, использующих bash, и их UID. Для этого необходимо вывести первое и третье поле этого файла. Утилита awk позволяет обращаться к полям строк, разделенных с помощью пробелов или табуляций, следующим образом: $0 — вся строка, $1 — первое поле,
$2 — второе и т. д.
В нашем случае разделителем полей является двоеточие, поэтому данный символ надо указать после опции -F (пример 8.29).
Язык 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 символов.