Как подвести итоги по колонке
У меня есть файл, который выглядит так:
A B C 128 D
Z F R 18 -
M W A 1 -
T B D 21 P
Z F R 11 -
L W A 10 D
Я ищу способ суммировать столбец 4 (для строк, столбец 5 выглядит как D), здесь в этом примере будет: 128 + 10 = 138 .
Мне удалось подвести итог всего 4-го столбца с помощью этой команды:
cat file.txt |awk '{total+= $4} END {print total}'
2 ответа
Решение
Вы просто пропустили шаблон, чтобы выбрать, к каким линиям относится ваше действие.
awk '$5 == "D" {total += $4} END {print total}' file.txt
В awk
шаблон применяется к каждой строке ввода, и, если шаблон соответствует, действие применяется. Если паттерна нет (как в вашей попытке), строка обрабатывается безоговорочно.
Решение с datamash
а также sort
:
cat file.txt | sort -k5 | datamash -W -g5 sum 4
sort -k5
для сортировки по5
колонка.datamash
использования-W
указать, что пробел является разделителем,-g5
группировать по5th
колонка и, наконец,sum 4
чтобы получить сумму4th
колонка.
Это дает такой вывод:
- 30
D 138
P 21