Вы сказали, что входной файл отсортирован, поэтому вы можете значительно улучшить команду awk
:
awk -F" " '{if (key!=$1) {print key" "sum; key=$1; sum=0} sum+=$2}
END {print key" "sum}' inputfile
Эта команда использует постоянный объем памяти вместо линейного количества ключей. Как подозревал Джон , память может быть основным замедлением в вашем случае.
Поскольку ваш пример файла не отсортирован, мы тестируем команду в конвейере после sort
$ sort src | awk ...
a 2
b 3
c 4
d 5
Дополнительную пустую строку в начале можно удалить, добавив еще одну if
в команду awk
или добавив ... | tail -n +2
.
В случае, если ваш входной файл не отсортирован, этот подход будет медленным, даже при использовании LC_ALL=C sort
для сортировки быстрее (в моей системе это занимает вдвое меньше времени, чем sort
).
Обратите внимание, что это просто улучшение команды awk
. Команда datamash
, предложенная Романом , также извлекает выгоду из уже отсортированных данных и бьет awk
.