23.06.2025

Как использовать awk? Основы и принцип работы

В Linux существует множество различных инструментов, которые облегчают работу пользователя и администратора, выполняя рутинные или сложные задачи. Подобные решения позволяют автоматизировать и упростить работу пользователя. Утилита awk не является исключением!

Для работы с семейством ОС Linux часто требуется изменение конфигураций, датасетов, документов и иных типов данных, которых в ОС полно, требующих обработку в соответствии с заданным шаблоном. Данная утилита не представляет собой редактор классического вида, а является потоковым решением, которое сразу обрабатывает данные в соответствии с условием. Рассмотрим ее подробнее в данной инструкции!

Что такое awk и как его использовать?

Awk – это потоковый текстовый редактор, фильтрации и обработки данных, поступающих на вход. Затем, которые передаются на стандартный поток вывода stdout. Его уже можно перенаправить в файл или в иную утилиту для дальнейшей работы с ними.

Awk это не только утилита, а полноценный язык обработки данных, который построково считывает информацию и применяет соответствующие команды о изменении. Для наглядности, возьмем в пример тестовые данные и рассмотрим на его примере базовые команды:

echo '1:2:3:4:5:6:7:8' | awk -F ":" '{print $1}'

Скриншот №1 — Простой поиск в массиве данных

Данная команда выполняет поиск значения в первой позиции с учетом того, что разделитель «:» и после того, как значение найдено применить к нему команду «print». Что позволяет вывести содержимое на экран. Данная конструкция на первый взгляд кажется монструозной и не логичной, однако, разобрав синтаксис станет более понятно!

awk  [опции] '[условие {команда}]' file

Опция -F позволяет переопределить разделитель между блоками данных, для работы не обязательно использовать кавычки. Приемлемо использование сразу после опции, к примеру -F “:” эквивалентно -F: что позволяет упростить работу. Так же среди опций можно найти следующие:

Следующий блок условие и команда, утилита построково читает данные на вход и применяет команду к подходящим под указанное условие значениям. Для обозначения границ шаблона используется формат/[value]/. Большинство логических выражений можно имплементировать в данные рамки. Так же, при обработке потока текста утилита определяет переменные, которые мог быть полезны для обработки и так же использоваться в условии. К примеру, $1 переменная определяет первый элемент в строках. Допустим, что поставлена задача вывести все логины пользователей. Для этого пропишем команду ниже:

cat /etc/passwd | awk -F: '{print $1}'

Скриншот №2 — Логины

А если необходимо найти среди всех значений первой колонки пользователя с логином ‘root’, то используем следующую команду:

cat /etc/passwd | awk -F: '/root/ {print $1}'

Скриншот №3 — Поиск логина

Для поиска /root необходимо предварительно экранировать знак /, это значит поставить перед ним обратный слеш \, так утилита поймет, что это не знак начала и конца шаблона, а его часть!

cat /etc/passwd | awk -F: '//root/ {print $1}'

Если необходимо выполнить более структурно наглядный поиск для этого можно использовать обращение к переменным и сравнивать результат:

cat /etc/passwd | awk -F: '$1 == "root" || $4 == "bin" {print}'

Скриншот №4 — Поиск по переменным

Для многозадачного шаблона с выводом в текстовый файл будем использовать команду:

cat /etc/passwd | awk  -F:  '/root/{print} /docker/ {print}' > /tmp/result1.txt

Скриншот №5 — Многозадачный фильтр

Все действия были выполнены в среде облачного сервера от Serverspace, для этого перейдем к созданию сервера, на любой из двух платформ vStack cloud или же VMware cloud. Нажмем на кнопку Создать сервер и выберем конфигурацию, подходящую под наши задачи, затем нажмем кнопку Создать:

Скриншот №6 — Создание сервера

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

Если необходимо просчитать количество существующих аккаунтов, то для этого так же можно использовать заготовленную переменную NR:

cat /etc/passwd | awk -F: '/root/{print NR}'

Скриншот №7 — Количество аккаунтов

Для более подробного списка возможных опций и элементов вызовете справку командой:

man awk

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