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 "Загальний вік:", sum}' data.txt

Результат:

Загальний вік: 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. Тепер ти точно знаєш, як зробити свої дані більш слухняними!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ