Введение
Помимо фильтрации и извлечения текста, awk — это мощный язык обработки текста, который умеет выполнять арифметические операции. С его помощью можно суммировать столбцы, вычислять средние значения и подсчитывать вхождения, создавая отчёты и статистику непосредственно из командной строки.
Это одна из причин, по которой awk остаётся востребованным уже несколько десятилетий: многие операционные задачи связаны с подготовкой простых отчётов по текстовым файлам, а awk позволяет выполнять их без полноценной электронной таблицы или отдельной среды программирования.
В этой лабораторной работе вы научитесь использовать awk, чтобы:
- Инициализировать переменные: задавать начальные значения в блоке
BEGIN. - Выполнять вычисления: создавать текущие итоги, складывая значения из каждой строки.
- Выводить итоговые результаты: печатать итоги и сводные данные в блоке
END. - Подсчитывать строки по условию: учитывать только строки, соответствующие заданным критериям.
Инициализация переменной
Перед началом вычислений часто требуется инициализировать переменные. В awk блок BEGIN идеально подходит для этого, поскольку выполняется один раз — до обработки любых строк.
Поэтому BEGIN обычно используют для подготовительных действий: инициализации счётчиков, итоговых значений или заголовков. В других языках программирования эту роль выполняет код инициализации.
Посмотрите содержимое файла данных data.txt:
cat data.txt
В нём содержатся два столбца: Item ($1) и Quantity ($2).
Создайте переменную с именем total и задайте ей значение 0.
Выполните эту команду:
awk 'BEGIN { total=0; print "Calculator ready. Total is initialized to:", total }' data.txt
Как это работает:
awkвыполняет блокBEGIN.- Задаёт переменной
totalзначение 0. - Выводит сообщение.
- Поскольку после блока
BEGINнет основного блока кода, выполнение останавливается (хотя технически программа готова обработать файл).
Суммирование столбца
Теперь обработайте файл. Нужно сложить значения второго столбца ($2), в котором указано количество.
Для каждой прочитанной строки awk должен добавлять $2 к переменной total.
Синтаксис операции присваивания со сложением — total += $2. Это сокращённая запись выражения total = total + $2.
Здесь awk становится чем-то большим, чем инструмент для вывода столбцов. При чтении файла он сохраняет текущее состояние, поэтому может постепенно формировать итоги и сводные данные, а не только выводить исходные строки.
Выполните эту команду, чтобы увидеть вычисления для каждой строки:
awk 'BEGIN { total=0 } { total += $2; print "Added", $1, "("$2") - Current Total:", total }' data.txt
Логика работы:
- BEGIN: инициализирует
totalзначением 0. - Основной цикл: для каждой строки добавляет количество (
$2) кtotalи выводит текущий статус.
Вы увидите, как итоговая сумма увеличивается по мере обработки каждого товара.
Вывод итогового результата
Обычно требуется вывести только итоговую сумму, без промежуточных результатов.
Для этого используется блок END. Он выполняется один раз после обработки всех строк.
Таким образом, скрипт awk часто состоит из трёх этапов: BEGIN для подготовки, основного блока для обработки каждой записи и END для формирования итогового отчёта. Эта структура — одна из самых важных концепций для эффективного использования awk.
Выполните очищенный вариант команды:
awk 'BEGIN { total=0 } { total += $2 } END { print "Final Total Quantity:", total }' data.txt
Разбор команды:
BEGIN: задаётtotalзначение 0.{ ... }: читает файл и без вывода добавляет$2кtotal.END: после достижения конца файла выводит итоговое значениеtotal.
В результате должно быть выведено Final Total Quantity: 22.
Подсчёт по условию
Часто требуется подсчитать вхождения по условию, а не просто сложить все значения.
Например: «У скольких товаров количество на складе больше 4?»
- Инициализируйте счётчик (
count = 0). - Проверьте каждую строку:
if ($2 > 4). - Если условие выполняется, увеличьте счётчик:
count++. - Выведите результат в блоке
END.
Этот пример показывает, как awk за один проход по файлу объединяет разбор данных, условия и арифметические операции. Для многих операционных отчётов это позволяет не писать отдельную программу на другом языке.
Выполните команду подсчёта:
awk 'BEGIN { count=0 } { if ($2 > 4) count++ } END { print "Items with quantity > 4:", count }' data.txt
Результат должен быть равен 2 (Apple и Cherry).
Логику можно комбинировать. Следующая команда суммирует только значения, которые больше 4:
awk 'BEGIN { sum=0 } { if ($2 > 4) sum += $2 } END { print "Sum of quantities > 4:", sum }' data.txt
Сумма равна 13 (5 + 8).
Итоги
В этой лабораторной работе вы научились использовать awk для вычислений и статистики:
- Блок BEGIN: инициализировать переменные до начала обработки.
- Арифметика (
+=): выполнять вычисления, например суммировать столбцы построчно. - Условия (
if): выполнять логику только при соблюдении заданных критериев, например при подсчёте строк. - Блок END: выводить итоговые результаты после завершения обработки файла.
Эти возможности позволяют создавать сложные сводные данные и метрики из текстовых файлов непосредственно в терминале.



