Программы
10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 9 — поиск с awk

10 хороших примеров работы в Linux, FreeBSD и прочих Unix. Часть 9 — поиск с awk

Сегодня речь пойдёт про базовые возможности awk. Даже самое минимальное знание этого языка может нехило упростить вашу жизнь в Unix-based системах.

Это девятая заметка из цикла перевода статьи «Learn 10 good UNIX usage habits» от IBM. По сути, это небольшой "финт ушами" в вашу копилку знаний о работе в терминале.

Сегодня речь пойдёт про базовые возможности awk. Даже самое минимальное знание этого языка может нехило упростить вашу жизнь в Unix-based системах.

AWK — скриптовый язык разбора и обработки входного потока.

9. Ищите во входном потоке нужные поля, а не строки.

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

Следующий простой пример иллюстрирует попытку найти файл, изменённый в декабре силами grep:

$ ls -l /tmp/a/b/c | grep Dec
-rw-r--r--  7 joe joe  12043 Jan 27 20:36 December_Report.pdf
-rw-r--r--  1 root root  238 Dec 03 08:19 README
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar

В этом примере мы фильтруем вывод команды ls по наличию в строке подстроки "Dec". Однако. помимо файлов, изменённых в декабре, мы успешно получаем и December_Report.pdf, который изменён в январе... Само собой это из-за названия файла. Всё понятно. Но разве это вы хотели получить?

Если же вы всё же решили получить только файлы, изменённые в декабре, стоит таки воспользоваться awk. В awk вы можете указать, какие конкретно поля (столбцы) входного потока вас интересуют:

$ ls -l | awk '$6 == "Dec"'
-rw-r--r--  3 joe joe   5096 Dec 14 14:26 archive.tar
-rw-r--r--  1 root root  238 Dec 03 08:19 README

В данном случае мы просим сравнить 6-ую колонку на предмет совпадения со строкой "Dec". И в итоге получаем именно то, чего мы хотели.

Так что не такая уж и плохая идея подучить какой-нибудь простой скриптовый язык. В будущем это, возможно, упростит вам жизнь.

Изображение Шпаргалка по командам Linux, FreeBSD и MacOS