JavaRush /Курсы /Docker SELF /Форматирование данных с использованием `awk`

Форматирование данных с использованием `awk`

Docker SELF
8 уровень , 2 лекция
Открыта

1. Знакомство с awk

awk — мощная текстовая утилита для обработки данных. Если представить текстовый файл как таблицу, где строки — строки (логично), а столбцы — это данные, разделённые пробелами, то awk становится нашим лучшим другом. Он поможет быстро выбирать столбцы, фильтровать строки, форматировать данные и даже выполнять арифметические операции.

Назван в честь своих авторов — Alfred Aho, Peter Weinberger и Brian Kernighan (именно, того самого, который участвовал в создании языка C).

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

Синтаксис awk

Базовый синтаксис команды выглядит следующим образом:

awk 'шаблон {действие}' файл
  • шаблон — условие, которое проверяется для каждой строки файла.
  • действие — операции, выполняемые на строках, подходящих под шаблон.
  • Если шаблон отсутствует, действие выполняется для каждой строки.

Пример:

awk '{print $1}' data.txt

Эта команда напечатает первый столбец ($1) для каждой строки файла data.txt.


2. Основные возможности awk

1. Выбор столбцов

Самый простой способ использования awk — выбрать один или несколько столбцов из файла. Поле обозначается как $n, где n — номер столбца, начиная с 1.

Пример:

Вывести первый и третий столбцы:

awk '{print $1, $3}' data.txt

Допустим, наш файл data.txt выглядит так:

John 25 Engineer
Jane 30 Designer
Mike 28 Developer

Результат:

John Engineer
Jane Designer
Mike Developer

2. Условная обработка строк

Условия позволяют обрабатывать только те строки, которые удовлетворяют определённым критериям.

Пример:

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

awk '$2 > 27 {print $1, $2}' data.txt

Результат:

Jane 30
Mike 28

3. Арифметические операции

awk может выполнять арифметические операции. Это полезно, когда вам нужно рассчитать что-то на лету.

Пример:

Добавить 10 к значению во втором столбце:

awk '{print $1, $2+10}' data.txt

Результат:

John 35
Jane 40
Mike 38

4. Подсчёт строк

awk автоматически знает, сколько строк было обработано. Эта информация содержится в переменной NR (Number of Records).

Пример:

Подсчитать количество строк в файле:

awk 'END {print NR}' data.txt

Результат:

3

3. Расширенные возможности

1. Форматирование вывода

awk поддерживает мощный форматированный вывод с использованием функции printf. Это аналог функции printf в C.

Пример:

Вывести данные с выравниванием:

awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt

Результат:

John       25    Engineer  
Jane       30    Designer  
Mike       28    Developer 

2. Переменные

Вы можете использовать переменные для хранения данных и упрощения работы.

Пример:

Подсчитать сумму второго столбца:

awk '{sum += $2} END {print "Total Age:", sum}' data.txt

Результат:

Total Age: 83

3. Регулярные выражения

awk поддерживает регулярные выражения для поиска строк.

Пример:

Вывести строки, где в первом столбце есть буква J:

awk '/J/ {print $0}' data.txt

Результат:

John 25 Engineer
Jane 30 Designer

4. Пример на практике

1. Анализ системного журнала

Допустим, у нас есть системный лог-файл /var/log/syslog, и мы хотим узнать, какие процессы чаще всего упоминаются.

Команда:

cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10

Что она делает:

  1. cat /var/log/syslog — читает содержимое файла.
  2. awk '{print $5}' — извлекает пятый столбец (имя процесса).
  3. sort — сортирует строку по алфавиту.
  4. uniq -c — подсчитывает количество уникальных строк.
  5. sort -nr — сортирует строки по убыванию числового значения.
  6. head -10 — выводит топ-10 процессов.

2. Подготовка отчёта о зарплатах

У нас есть файл salaries.txt:

John 25 4000
Jane 30 5000
Mike 28 4500

Задача:

Увеличить зарплаты на 10% и показать итоговый отчёт.

Решение:

awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt

Результат:

John       25    4400.00
Jane       30    5500.00
Mike       28    4950.00

5. Частые ошибки при работе с awk

Проблемы с разделителями

По умолчанию awk использует пробелы или табуляцию в качестве разделителя. Если ваши данные разделены чем-то другим (например, запятыми или двоеточиями), нужно указать это с помощью опции -F.

Пример:

Файл data.csv:

John,25,Engineer
Jane,30,Designer
Mike,28,Developer

Команда для работы с CSV:

awk -F',' '{print $1, $3}' data.csv

Результат:

John Engineer
Jane Designer
Mike Developer

Пропуск полей из-за кривого формата

Иногда строки могут содержать неожиданные пробелы или отсутствующие столбцы. Это может вызвать ошибки. Всегда полезно проверять данные перед началом работы.

Практическое применение

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

Для более глубокого изучения awk советую заглянуть в официальную документацию GNU Awk. Теперь вы точно знаете, как сделать ваши данные более послушными!

1
Задача
Docker SELF, 8 уровень, 2 лекция
Недоступна
Вывод первого столбца данных
Вывод первого столбца данных
1
Задача
Docker SELF, 8 уровень, 2 лекция
Недоступна
Условный вывод строк
Условный вывод строк
1
Задача
Docker SELF, 8 уровень, 2 лекция
Недоступна
Подсчёт общей суммы
Подсчёт общей суммы
1
Задача
Docker SELF, 8 уровень, 2 лекция
Недоступна
Форматирование вывода и расчёт зарплаты
Форматирование вывода и расчёт зарплаты
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Slevin Уровень 59
1 октября 2025
Мини язык программирования из трех-буквенной утилиты... Офигеть... + мини SQL для одиночных таблиц, хотя не удивлюсь, если можно и связывать вывод из разных "таблиц". Линух порой поражает своим функционалом, а порой своей доисторичностью и неудобность. uniq -c — подсчитывает количество уникальных строк. uniq -c — считает количество повторений каждой уникальной строки.