Вы можете сделать это с помощью awk
, сначала сохранив поля в первой записи, а затем для всех последующих записей, сравнив, совпадает ли первое поле, если да, добавьте содержимое полей два и три и продолжите. Если первое поле не соответствует, выведите свое первое поле и текущие суммы, например,
awk '{
if ($1 == a) {
b+=$2; c+=$3;
}
else {
print a, b, c; a=$1; b=$2; c=$3;
}
} END { print a, b, c; }' file
С помощью ввода в file
вы можете скопировать и вставить вышеизложенное в свой терминал и получить следующее:
Пример использования / вывода
$ awk '{
> if ($1 == a) {
> b+=$2; c+=$3;
> }
> else {
> print a, b, c; a=$1; b=$2; c=$3;
> }
> } END { print a, b, c; }' file
1555971000 6 3
1555971300 5 0
Использование awk
Массивы
Более короткая и краткая альтернатива с использованием массивов, которая не требует, чтобы ваш ввод был отсортирован в следующем порядке:
awk '{a[$1]+=$2; b[$1]+=$3} END{ for (i in a) print i, a[i], b[i] }' file
(тот же вывод)
Использование массивов позволяет одинаково хорошо суммировать столбцы для одинакового поля1, если ваш файл данных содержал следующие строки в случайном порядке, например,
1555971300 2 0
1555971000 0 2
1555971000 6 1
1555971300 3 0