Это девятая заметка из цикла перевода статьи «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". И в итоге получаем именно то, чего мы хотели.
Так что не такая уж и плохая идея подучить какой-нибудь простой скриптовый язык. В будущем это, возможно, упростит вам жизнь.
