Только для посетителей нашего блога: получите дополнительные 3 месяца бесплатно + скидку 10% на трехгодичный план YSBLOG10
Захватить сделку

Команда Awk: объяснение на практических примерах в 2026 году

Команда awk — это Мощная утилита для обработки текста в Unix/Linux, которая построчно сканирует текст, разбивает его на поля и выполняет правила обработки шаблонов для фильтрации, преобразования и обобщения данных.

Он отлично подходит для быстрого анализа логов, CSV-файлов и системных выходных данных, что делает его незаменимым для DevOps, SRE и работы с данными в командной строке. Если вы работаете с серверами Linux или manage При развертывании кода изучение команды awk — один из наиболее полезных навыков, которые вы можете приобрести.

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


Что такое команда awk?

awk — это алгоритм, основанный на шаблонах. Язык обработки данных, доступный в большинстве Unix-подобных систем (Linux, macOS, BSD).

Команда AWK

Названная в честь своих создателей (Ахо, Вайнбергер, Керниган), эта программа считывает входные данные построчно (записи), разбивает каждую на поля и выполняет действия при совпадении шаблонов. Она идеально подходит для извлечения столбцов, фильтрации строк, вычисления агрегатных функций и быстрого создания отчетов.

В отличие от sed или grep, awk изначально понимает «столбцы» и поддерживает переменные, массивы, условные операторы и функции, что позволяет заменить небольшие скрипты, оставаясь при этом легковесным и быстрым.


Синтаксис и основы awk

Структура действий по шаблону

По своей сути, программы awk — это Список правил шаблона { действие }. awk выполняет действие только для строк, в которых шаблон совпадает. Без шаблона действие выполняется для всех строк. Без действия по умолчанию выполняется вывод найденных строк.

awk 'pattern { action }' file
awk '{ print $0 }' file          # print every line (default action shown explicitly)
awk '/error/' file               # print lines matching regex "error"

Поля, записи и разделители

awk разделяет каждую строку (запись). Разделитель полей используется для обозначения разделителей. По умолчанию разделителем полей (FS) является любой пробел. Доступ к полям осуществляется как $1, $2, …, а вся строка — как $0. Изменить разделитель полей можно с помощью параметра -F или внутри блока BEGIN.

# space-separated
awk '{ print $1, $3 }' data.txt

# comma-separated (CSV-like)
awk -F, '{ print $1, $3 }' data.csv

# set output field separator for pretty printing
awk -F, 'BEGIN{ OFS="\t" } { print $1, $3 }' data.csv

Полезные встроенные переменные

Наиболее часто используемые встроенные функции:

  • NR: текущий номер записи (строки)
  • ФНР: текущий номер записи в текущем файле
  • НФ: количество полей в текущей строке
  • FS/OFS: разделитель полей ввода/вывода
  • RS/OR: разделитель записей ввода/вывода
  • $ 0: вся строка; $1..$NF: поля
# print line number and first field
awk '{ print NR, $1 }' file

# print last field of each line
awk '{ print $NF }' file

Начало работы: основные примеры использования awk

# Reorder fields 3 and 1; add a dash between
awk '{ print $3 "-" $1 }' access.log

# Print specific columns from top output (skip header)
top -b -n1 | awk 'NR>7 { print $1, $9, $12 }'

Фильтрация строк по значению или регулярному выражению

# Lines where 3rd field equals "FAILED"
awk '$3=="FAILED"' audit.log

# Requests returning 500 status code in Nginx access log (status is $9 or $8 depending on format)
awk '$9==500' /var/log/nginx/access.log

# Regex match: case-insensitive search for "timeout"
awk 'tolower($0) ~ /timeout/' app.log

Вычислите суммы, средние значения и минимальные/максимальные значения.

# Sum the 2nd column
awk '{ sum += $2 } END { print sum }' metrics.txt

# Average of column 4 (skip lines starting with #)
awk '$0 !~ /^#/ { n++; total += $4 } END { if (n>0) print total/n }' data.txt

# Track min and max
awk 'NR==1{min=max=$2} { if($2<min)min=$2; if($2>max)max=$2 } END{ print "min",min,"max",max }' stats.txt

Подсчет уникальных значений и частоты

Ассоциативные массивы значительно упрощают группировку.

# Count requests per IP (IP assumed to be $1)
awk '{ hits[$1]++ } END { for (ip in hits) print hits[ip], ip }' access.log | sort -nr | head

Работа с CSV-файлами и пользовательскими разделителями.

Для простых CSV-файлов (без кавычек)-F работает. Для более сложных CSV-файлов функция FPAT в gawk может помочь сопоставлять поля как токены, а не разделять их по запятым.

# Basic CSV, print columns 1 and 3
awk -F, 'BEGIN{OFS=","} {print $1, $3}' users.csv

# gawk: handle commas inside quotes (basic FPAT pattern)
gawk 'BEGIN{ FPAT = "([^,]*)|(\"[^\"]+\")"; OFS="," } { print $1, $3 }' users.csv

Используйте блоки BEGIN и END.

Функция BEGIN выполняется до чтения входных данных; Команда END запускается после обработки всех строк, что удобно для заголовков, сводок и однократной установки FS/OFS.

awk 'BEGIN{ print "User,Count" } { c[$1]++ } END{ for (u in c) print u, c[u] }' log.txt

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


Анализ журналов веб-сервера (Apache/Nginx)

Операционные группы регулярно используют awk для Устранение неполадок, связанных с трафиком, производительностью и безопасностью. Примеры предполагают использование распространенного объединенного формата журналов; скорректируйте номера полей в соответствии с вашим фактическим форматом.

# Top 10 IPs by request volume
awk '{ ip=$1; hits[ip]++ } END{ for(ip in hits) print hits[ip], ip }' access.log | sort -nr | head -10

# Top 10 requested URLs (path often $7)
awk '{ path=$7; c[path]++ } END{ for(p in c) print c[p], p }' access.log | sort -nr | head -10

# Status code distribution (status often $9)
awk '{ sc=$9; c[sc]++ } END{ for(s in c) print s, c[s] }' access.log | sort -k1,1

# Total bytes sent (bytes often $10)
awk '$10 ~ /^[0-9]+$/ { bytes += $10 } END { print "Total bytes:", bytes }' access.log

Перенаправить вывод awk в функцию сортировки. Используйте uniq или head для быстрых отчетов. В сочетании с grep можно предварительно отфильтровать даты или виртуальные хосты.

Мониторинг системных и прикладных метрик

# CPU usage from mpstat: average user+system
mpstat 1 5 | awk '/Average/ { print "CPU %usr+%sys:", $3 + $5 }'

# Memory usage from /proc/meminfo
awk '/MemTotal/ {t=$2} /MemAvailable/ {a=$2} END{ printf "Mem Used: %.2f%%\n", (t-a)/t*100 }' /proc/meminfo

# Slow queries over 2s in application log (assuming duration is field 6 in seconds)
awk '$6+0 > 2 { print }' app.log

Очистить и преобразовать данные

# Normalize case and trim extra spaces
awk '{ gsub(/^ +| +$/,""); $0=tolower($0); print }' raw.txt

# Replace delimiter: tabs to commas
awk 'BEGIN{ OFS=","; FS="\t" } { print $1,$2,$3 }' input.tsv > output.csv

Совместная работа awk с другими инструментами командной строки

Awk отлично подходит для работы с конвейерами обработки данных. Он дополняет grep (предварительная фильтрация), sort (упорядочивание), uniq (дедупликация) и sed (замена текста). Используйте каждый инструмент по назначению, чтобы команды оставались короткими и читаемыми.


Продвинутые методы Awk

Группировка и агрегирование по ключам

# Revenue per customer (customer_id in $1, amount in $3)
awk -F, '{ rev[$1] += $3 } END { for (id in rev) printf "%s,%0.2f\n", id, rev[id] }' sales.csv | sort -t, -k2,2nr | head

Шаблоны диапазонов и обработка нескольких файлов

Соответствие шаблонов диапазона из Одно условие переходит в другое; FNR сбрасывается для каждого файла отдельно, NR является глобальным для всех файлов.

# Print lines between markers
awk '/BEGIN_REPORT/,/END_REPORT/' app.log

# Compare corresponding lines across files
awk 'FNR==NR { a[$1]=$2; next } { print $0, a[$1] }' left.txt right.txt

Функции, условные операторы и массивы

# Derive buckets with if/else and functions
awk '{
  score=$2
  if (score>=90) grade="A"
  else if (score>=80) grade="B"
  else grade="C"
  print toupper($1), grade, length($1)
}' grades.txt

Советы по производительности и портативности

  • Предпочитаю простые узоры. и минимальное количество вызовов gsub для больших файлов.
  • Используйте числовые сравнения (например, $3+0 >= 100), чтобы избежать строковой семантики.
  • Установить FS/OFS Начните с первого раза для достижения стабильности.
  • Для очень больших объемов данных, передача потока на внешнюю сортировку для упорядочивания больших объемов данных.
  • Придерживайтесь POSIX awk Для обеспечения портативности используйте функции gawk (FPAT, asort) при необходимости.

Распространенные ошибки и лучшие практики

  • Цитата: Заключайте программы awk в одинарные кавычки, чтобы предотвратить раскрытие символов оболочкой. Экранируйте одинарные кавычки с осторожностью.
  • Номера полей: Форматы журналов различаются; проверьте, в каком столбце в вашей среде хранятся данные о состоянии, пути или байтах.
  • Сложность CSV-файлов: В реальных CSV-файлах присутствуют кавычки и переносы строк; для более надежной обработки CSV-файлов можно использовать gawk с FPAT или специализированные инструменты, такие как Miller.
  • Местное время: Сортировка и преобразование регистра могут различаться в зависимости от локали. Установите LC_ALL=C для предсказуемого поведения.
  • Тестирование: Начните с небольшой выборки (головы) и постепенно добавляйте условия.

awk, sed и grep: когда какой использовать

  • Используйте grep для поиска линии, соответствующие шаблону (быстрая фильтрация).
  • Используйте sed для замены или отредактируйте текст на месте (редактор потока).
  • Используйте awk для анализа полей. вычислить значения, сгруппировать и суммировать (структурированная обработка).

С помощью Grese можно сузить область ввода.awk используется для вычислений, sed — для очистки выходных данных. Такой подход, ориентированный на конвейер, обеспечивает эффективность и удобство сопровождения командной строки.


Как awk помогает командам хостинга и DevOps

От выявления несанкционированных IP-адресов до количественной оценки пиков трафика 5xx, awk позволяет за считанные секунды преобразовывать необработанные логи в ответы без необходимости использования сложных инструментов. В средах хостинга такая скорость ускоряет реагирование на инциденты, планирование мощностей и настройку производительности, особенно при подключении по SSH к производственным серверам с ограниченными ресурсами.

At YouStable, Наши manageхостинг и VPS Клиенты часто запрашивают практическую возможность мониторинга без сложных стеков. awk, наряду со стандартными инструментами Linux, обеспечивает мгновенный анализ ситуации.

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

Более практичные остроумные фразы, которые вы будете использовать снова и снова.

# Remove duplicate lines while keeping first occurrence
awk '!seen[$0]++' file.txt

# Show lines with more than N fields (e.g., malformed)
awk 'NF > 10' data.txt

# Add header to computed report
awk 'BEGIN{print "status,count"} {c[$9]++} END{for(s in c) print s "," c[s]}' access.log

# Extract date (first field) and count per day
awk '{ d=$1; gsub(/\[|\]/,"",d); day=substr(d,1,11); hits[day]++ } END{ for (k in hits) print hits[k], k }' access.log | sort -nr

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

Для чего используется команда awk в Linux?

awk — это язык обработки текста. Используется для построчного сканирования файлов, разделения строк на поля и применения правил обработки шаблонов. Применяется для извлечения столбцов, фильтрации строк, вычисления статистики, создания отчетов и преобразования данных, особенно из журналов, CSV-файлов и результатов выполнения команд.

Как вывести на экран определенные столбцы с помощью awk?

Используйте $1, $2, … для ссылки на поля. Для CSV-файлов установите параметр -F, а при необходимости — OFS для вывода. Пример: awk -F, 'BEGIN{OFS=”,”} {print $1,$3}' file.csv выводит первый и третий столбцы через запятую.

В чём разница между NR и FNR в awk?

NR — это полная строка Счетчик по всем входным файлам постоянно увеличивается. FNR — это количество строк в текущем файле, которое сбрасывается до 1, когда awk начинает работу с новым файлом. Используйте шаблоны FNR==NR для построения карт поиска на основе первого файла, а затем обработайте второй.

Может ли awk обрабатывать сложные CSV-файлы с запятыми в кавычках?

Basic awk with -F, возникают проблемы, когда поля содержат запятые внутри кавычек. gawk решает эту проблему с помощью FPAT, определяя поля как токены. Для полностью надежного CSV (экранированные кавычки, переносы строк) рассмотрите специализированные инструменты, такие как Miller или xsv.

Что лучше: awk, sed или grep?

Они решают разные проблемы..grep выполняет поиск, sed редактирует потоки, а awk анализирует и вычисляет. Для структурированного анализа (столбцы, группировка, суммы) лучше всего подходит awk. Объедините их в конвейеры для получения наиболее эффективных и читаемых командных строк.

Освоение команды awk Это быстро окупится в любом рабочем процессе Linux, DevOps или хостинга. Держите эти примеры под рукой, адаптируйте их к форматам ваших логов, и вы за считанные секунды превратите необработанный текст в полезную информацию для принятия решений.

Отправить по:

Санджит Чаухан

Санджит Чаухан — блогер и эксперт по SEO, посвятивший себя помощи веб-сайтам в органическом росте. Он делится практическими стратегиями, полезными советами и идеями для увеличения трафика, улучшения позиций в поисковой выдаче и максимального присутствия в интернете.

Оставьте комментарий

Ваш электронный адрес не будет опубликован. Обязательные поля помечены * *

Наверх