Skip to content

Утилита awk

Описание

awk — это мощный инструмент для манипуляции текстовыми данными, особенно если они организованы в виде строк и столбцов (например, логи, CSV-файлы). Это язык программирования с поддержкой регулярных выражений, условий, циклов, переменных и функций.

Имя awk происходит от фамилий его создателей: Aho, Weinberger и Kernighan.


Синтаксис

awk [опции] 'скрипт' файл(ы)

или

команда | awk [опции] 'скрипт'

Примеры использования

1. Вывести содержимое файла

awk '{ print }' файл.txt

Выведет все строки файла.

2. Вывести определённые столбцы

awk '{ print $1, $3 }' файл.csv

Выведет первый и третий столбец каждой строки.

3. Фильтрация строк по условию

awk '$3 > 100 { print $0 }' данные.txt

Выведет только те строки, где значение в третьем столбце больше 100.

4. Поиск по ключевому слову

awk '/ошибка/ { print }' лог.txt

Выведет все строки, содержащие слово "ошибка".

5. Использование пользовательского разделителя

awk -F ',' '{ print $2 }' файл.csv

Указывает запятую как разделитель полей и выводит второй столбец.

6. Суммирование значений в колонке

awk '{ sum += $1 } END { print sum }' числа.txt

Посчитает сумму всех чисел из первого столбца.


Основные переменные awk

Переменная Описание
$0 Вся текущая строка
$1, $2, ... Отдельные поля (столбцы) текущей строки
NF Количество полей в текущей строке
NR Номер текущей строки (всего)
FNR Номер текущей строки в текущем файле
FS Разделитель полей (по умолчанию пробел или табуляция)
OFS Разделитель вывода полей
ORS Разделитель вывода строк
FILENAME Имя текущего файла

Полезные примеры

1. Вывести количество строк в файле

awk 'END { print NR }' файл.txt

2. Вывести заголовок и данные

awk 'NR == 1 { print "Заголовок:", $0 } NR > 1 { print "Строка", NR-1, ":", $0 }' файл.csv

3. Группировка и подсчёт

awk '{ count[$1]++ } END { for (key in count) print key, count[key] }' логи.txt

Подсчитывает, сколько раз встречается каждое значение в первом столбце.


Условия и операторы

awk поддерживает: - Условия: if, else if, else - Циклы: for, while, do while - Логические операторы: &&, ||, ! - Регулярные выражения: /pattern/, $1 ~ /pattern/, $1 !~ /pattern/

Пример:

awk '{ if ($3 > 90) print $1, "отличник"; else print $1, "не прошёл" }' оценки.txt

Функции awk

awk имеет встроенные функции:

Группа Примеры
Математика sqrt(x), rand(), int(x)
Работа со строками length(s), substr(s, i, n), index(s, t)
Разделение строк split(s, arr, sep)
Регулярные выражения match(s, r), sub(r, t, s), gsub(r, t, s)

Пример:

awk '{ print substr($1, 1, 3) }' файл.txt

Выводит первые три символа из первого столбца.


Альтернативы

Инструмент Когда использовать
sed Для потоковой обработки и замены текста
cut Если нужно просто вырезать столбцы
grep Для поиска строк по шаблону
perl / python Для сложной обработки текста
datamash Для статистики и математических операций над данными

Пример работы

Создадим тестовый файл данные.txt:

echo -e "Иван 85\nОльга 95\nПетр 70" > данные.txt

Посчитаем средний балл:

awk '{ sum += $2; count++ } END { print "Средний балл:", sum/count }' данные.txt

Результат:

Средний балл: 83.3333

Полезные ссылки