🖥 AWK — мощный язык обработки текста, заточенный под построчный разбор данных по колонкам.
Назван по фамилиям создателей (Aho, Weinberger, Kernighan). Незаменим там, где нужно вытащить, отфильтровать или пересчитать данные из таблиц, логов и вывода других утилит.
В отличие от grep (ищет строки) и sed (правит текст потоком), AWK мыслит записями и полями. Каждая строка — это запись, разбитая на колонки. Это превращает обработку структурированного вывода (ps, df, /etc/passwd, CSV, логи) в простые однострочники.
Программа на AWK — это набор правил вида:
awk 'паттерн { действие }' файл
— паттерн — условие, при котором срабатывает действие (можно опустить — тогда срабатывает на каждой строке)
— действие — что сделать с записью (можно опустить — тогда печатается строка целиком)
➡️ Ключевые встроенные переменные:
$0 — вся строка целиком
$1, $2, ... — поля (колонки) по порядку
NF — количество полей в строке (Number of Fields)
NR — номер текущей строки (Number of Records)
FS — разделитель полей на входе (по умолчанию — пробелы/табы)
OFS — разделитель полей на выходе
➡️ Основные параметры
-F — задать разделитель полей (-F: для /etc/passwd, -F, для CSV)
-v — передать переменную внутрь программы (-v threshold=80)
-f — взять программу из файла, а не из строки
🔵Блоки BEGIN и END
BEGIN выполняется до чтения файла, END — после. Удобно для заголовков и итогов.
✅ Примеры
Вывести только нужные колонки (имя пользователя и shell из passwd):
awk -F: '{print $1, $7}' /etc/passwd
root /bin/bash
daemon /usr/sbin/nologin
Найти процессы, потребляющие больше 50% CPU:
ps aux | awk '$3 > 50 {print $2, $11}'
Отфильтровать строки лога по коду ответа nginx и посчитать количество 5xx:
awk '$9 ~ /^5/ {count++} END{print "5xx errors:", count}' access.log
AWK — это полноценный мини-язык.
Для разовых однострочников он экономит десятки строк на grep | cut | sort, а в скриптах закрывает всю обработку табличных данных без выхода в Python.
#линуксятина
Назван по фамилиям создателей (Aho, Weinberger, Kernighan). Незаменим там, где нужно вытащить, отфильтровать или пересчитать данные из таблиц, логов и вывода других утилит.
В отличие от grep (ищет строки) и sed (правит текст потоком), AWK мыслит записями и полями. Каждая строка — это запись, разбитая на колонки. Это превращает обработку структурированного вывода (ps, df, /etc/passwd, CSV, логи) в простые однострочники.
Программа на AWK — это набор правил вида:
awk 'паттерн { действие }' файл
— паттерн — условие, при котором срабатывает действие (можно опустить — тогда срабатывает на каждой строке)
— действие — что сделать с записью (можно опустить — тогда печатается строка целиком)
➡️ Ключевые встроенные переменные:
$0 — вся строка целиком
$1, $2, ... — поля (колонки) по порядку
NF — количество полей в строке (Number of Fields)
NR — номер текущей строки (Number of Records)
FS — разделитель полей на входе (по умолчанию — пробелы/табы)
OFS — разделитель полей на выходе
➡️ Основные параметры
-F — задать разделитель полей (-F: для /etc/passwd, -F, для CSV)
-v — передать переменную внутрь программы (-v threshold=80)
-f — взять программу из файла, а не из строки
🔵Блоки BEGIN и END
BEGIN выполняется до чтения файла, END — после. Удобно для заголовков и итогов.
✅ Примеры
Вывести только нужные колонки (имя пользователя и shell из passwd):
awk -F: '{print $1, $7}' /etc/passwd
root /bin/bash
daemon /usr/sbin/nologin
Найти процессы, потребляющие больше 50% CPU:
ps aux | awk '$3 > 50 {print $2, $11}'
Отфильтровать строки лога по коду ответа nginx и посчитать количество 5xx:
awk '$9 ~ /^5/ {count++} END{print "5xx errors:", count}' access.log
AWK — это полноценный мини-язык.
Для разовых однострочников он экономит десятки строк на grep | cut | sort, а в скриптах закрывает всю обработку табличных данных без выхода в Python.
#линуксятина