Просто измените окончательную готовую
на готовую | sort -nr
Это сортирует вывод цикла for
через конвейер и не требует временных файлов.
По-моему, это не похоже на работу для shell. Я бы сделал это на perl
/python
/ruby
... хотя здесь awk
может быть достаточно:
$ cat sum
paste -sd + - | bc
$ sort -t , -k 1,1 input | awk -F, -v cmd=./sum '
function out() {printf "%s,", l;close(cmd)}
NR>1 && $1 != l {out()}
{print $2 | cmd; l=$1}
END {if (NR) out()}'
1,15
2,20
Если я понял, что вы ищете: скрипт, аналогичный тем, что создают дистрибутив из набора образцов, но с большим количеством опций накопления. Я написал awk
скрипт для этого.
https://drive.google.com/open?id=0B0Kg_QLltwbNU21zbHFMY1hnSjQ
Это не совсем то, что вы хотите, но совпадение должно быть значительным. Во-первых - индексы могут быть не только целочисленными, во-вторых - единственным методом накопления является суммирование. Но поскольку это просто скрипт, вы можете модифицировать его по своему усмотрению легче, чем, скажем, программу на Си.
Наконец, такие скрипты применимы только в том случае, если набор данных достаточно мал, для больших наборов они слишком медленны! Поэтому предпочтительнее использовать более специализированный пакет (R
и т.д.).
P.S. Чтобы добавить другие аккумуляторы, замените +=
на пользовательскую функцию (а-ля "монада").