bash добавить столбцы с тем же первым столбцом

У меня есть файл с именем в первом столбце и количеством во втором столбце. Он отсортирован по имени.

    dan 3355
    dan 667
    dan 889
    frank 8
    frank 99
    frank 90
    ian 9

Я хотел бы объединить все одинаковые имена и вывести общее количество для каждого имени:

    dan 4911
    frank 197
    ian 9

Я знаю, что я могу использовать uniq для получения общего количества идентичных строк, но как я могу сохранить количество, которое у меня есть в моих данных?


person user1190650    schedule 30.11.2012    source источник


Ответы (2)


Вы можете использовать ассоциативный массив awk:

 awk '{arr[$1]+=$2;} END {for (i in arr) print i, arr[i]}' filename
person P.P    schedule 30.11.2012

Использование ассоциативной памяти awk не гарантирует, что имена будут появляться на выходе в том же порядке, что и на входе (и может быть неэффективным с точки зрения использования памяти для больших наборов данных).

Вместо этого используйте следующее

awk '(NR==1){oldname=$1;s=$2;next};
     (oldname == $1){s=s+$2;next};
     {print oldname, s;oldname=$1s=$2;next}
     END{print oldname,s}'
person Misha    schedule 30.11.2012