Как подвести итоги по колонке

У меня есть файл, который выглядит так:

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
Другие вопросы по тегам