Linux

Полный гайд по обработке текста с помощью AWK в Linux

В этом гайде вы узнаете, как использовать AWK для обработки текстовых файлов в Linux: извлечения нужных полей, фильтрации строк, объединения данных и автоматизации рутинных задач. После выполнения шагов вы сможете уверенно работать с большими текстовыми потоками.

Обновлено 18 июля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04 LTSUbuntu 22.04 LTSDebian 11Fedora 36Arch Linux

Введение / Зачем это нужно

AWK — это мощный язык для обработки текста, встроенный в большинство дистрибутивов Linux. Он позволяет быстро извлекать, фильтровать, преобразовывать и объединять данные в текстовых файлах, что особенно полезно при работе с логами, CSV, DNS-зонах или любыми табличными данными. После выполнения шагов этого гайда вы сможете автоматизировать рутинные операции с текстом, используя несколько строк кода вместо громоздких скриптов на других языках.

Требования / Подготовка

  • Установленная ОС Linux (Ubuntu, Debian, Fedora, Arch и другие).
  • Доступ к терминалу с правами обычного пользователя (или sudo для установки).
  • Базовое знакомство с командной строкой Linux.

Если AWK отсутствует, его легко установить через встроенный пакетный менеджер.

Пошаговая инструкция

Шаг 1: Установка AWK

Проверьте, установлен ли интерпретатор:

awk --version

Если выводит сообщение об ошибке, установите пакет:

  • Для Debian/Ubuntu:
    sudo apt install gawk
    
  • Для Fedora/CentOS:
    sudo dnf install gawk
    

Шаг 2: Простейший пример: вывод всех строк

Создайте тестовый файл:

echo -e "apple\nbanana\ncherry" > fruits.txt

Для вывода всех строк используйте:

awk '{print}' fruits.txt

Результат будет таким же, как и исходный файл.

Шаг 3: Извлечение нужных полей

Создайте файл с табличными данными:

cat > data.csv << 'EOF'
ID,Name,Age
1,Alice,30
2,Bob,25
3,Charlie,35
EOF

Чтобы извлечь только колонку Name, выполните:

awk -F',' 'NR>1 {print $2}' data.csv

NR>1 пропускает заголовок, -F',' устанавливает разделитель.

Шаг 4: Фильтрация строк по условию

Пусть в файле log.txt есть строки с уровнями ошибок. Чтобы оставить только строки, содержащие ERROR, выполните:

awk '/ERROR/ {print}' log.txt

Добавьте числовое условие, например, оставить ошибки с кодом выше 500:

awk '/ERROR/ && $5 > 500 {print}' log.txt

Шаг 5: Объединение данных из нескольких файлов

Создайте два файла:

# file1.txt
echo -e "a\nb\nc" > file1.txt
# file2.txt
echo -e "d\ne" > file2.txt

Для объединения в один файл combined.txt используйте:

awk 'FILENAME!=ARGV[1]{print} END{print "--- end ---"}' file1.txt file2.txt > combined.txt

В результате вы получите содержимое обоих файлов с разделителем.

Проверка результата

  • Убедитесь, что AWK установлен: awk --version выводит номер версии.
  • Проверьте вывод простого примера: awk '{print}' fruits.txt должно показать три строки.
  • Удостоверьтесь, что извлечение полей работает: awk -F',' 'NR>1 {print $2}' data.csv выводит Alice, Bob, Charlie.
  • Убедитесь, что фильтрация работает: awk '/ERROR/ {print}' log.txt отображает только строки с текстом ERROR.
  • Проверьте объединённый файл: cat combined.txt должен содержать a, b, c, d, e с разделителем --- end ---.

Если все проверки пройдены, вы готовы использовать AWK для более сложных текстовых задач.

Возможные проблемы

  • Отсутствие интерпретатора AWK – установите пакет gawk через ваш менеджер пакетов.
  • Неправильный разделитель полей – используйте -F для задания пользовательского разделителя, если поля разделены не пробелами.
  • Сбой при работе с Unicode – некоторые версии AWK ожидают -f или --posix; если встречаются странные символы, попробуйте gawk -U для поддержки Unicode.
  • Переполнение памяти при очень больших файлах – используйте awk в режиме потоковой обработки (awk '...' large_file.txt) или ограничьте количество строк через head/tail.

Часто задаваемые вопросы

Как запустить простую команду AWK для вывода первой колонки файла?
Что делать, если AWK не установлен в моей Linux-системе?
Как объединить несколько файлов с помощью AWK и записать результат в новый файл?

Полезное

Установка AWK
Простейший пример: вывод всех строк
Извлечение нужных полей
Фильтрация строк по условию
Объединение данных из нескольких файлов