Как посчитать сумму столбца по группам через awk в Linux

Как посчитать сумму столбца по группам через awk в Linux
Содержание статьи

Если в файле первая колонка обозначает группу, а вторая содержит число, awk может собрать сумму для каждой группы. В примере на Mentoring.digital просуммируем количество обработанных задач из TSV, где поля разделены табуляцией.

Создайте небольшой файл и проверьте сумму

Сначала запишите заголовок и три строки. printf в примере добавляет настоящие табуляции. Используйте отдельный каталог для учебного файла.

printf 'queue\tjobs\nalpha\t4\nbeta\t5\nalpha\t7\n' > jobs.tsv

awk -F '\t' '
  NR > 1 { total[$1] += $2 }
  END {
    for (queue in total) print queue, total[queue]
  }
' jobs.tsv | sort
# alpha 11
# beta 5

-F '\t' задаёт разделитель. NR > 1 пропускает первую строку, $1 становится ключом массива, а $2 прибавляется к сумме. Блок END печатает результат после чтения файла. sort делает порядок вывода предсказуемым при одном и том же окружении.

Проверьте границы формата

Пример рассчитан на один файл с двумя полями и целыми неотрицательными числами. У awk есть автоматическое числовое преобразование, поэтому перед суммированием проверьте число полей через NF и форму значения регулярным выражением ^[0-9]+$. Для CSV с кавычками, запятыми внутри поля и переносами строк используйте разбор формата, который умеет учитывать эти правила.

Задача для самостоятельной проверки

Добавьте новую строку с группой beta и нулём. Её сумма сохранится. Затем добавьте проверку формата и строку с третьей колонкой. Убедитесь, что проверка отвергает эту строку перед подсчётом. Если будете подавать несколько файлов с заголовками, используйте FNR для номера строки внутри каждого файла.

Задачи по разбору файлов встречаются на занятиях по DevOps. Подготовку входных данных и команды можно обсудить с ментором по Linux.

Похожие статьи по данной теме