Сумма помеченных строк perl / shellscript - PullRequest
1 голос
/ 25 июня 2010

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

5 X
8 Y
3 Z
9 X

Я хочу вывод, который суммирует числовые значения для каждого «тега»; например,

14 X
8 Y
3 Z

Хотите знать, есть ли один скользящий лайнер, который я могу использовать (по аналогии с теми, которые суммируют список целых чисел с помощью awk).

Ответы [ 5 ]

7 голосов
/ 25 июня 2010

Примерно так должно получиться:

perl -ne '$table{$2} += $1 if /(\d+)\s+(.+)/; END {print "$table{$_} $_\n" for keys %table}'

или использовать автоматическое разделение:

perl -ane '$table{$F[1] or next} += $F[0]; END {print "$table{$_} $_\n" for keys %table}'
0 голосов
/ 03 августа 2010
gawk "{count[$2]+=$1}END{for(i  in count)print count[i],i}" 1.t
0 голосов
/ 25 июня 2010

Вывод в случайном порядке

perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for keys%t'

в алфавитном порядке по тегу

perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for sort keys%t'

по значению

perl -alne'$t{$F[1]}+=$F[0]}{print"$t{$_} $_"for sort{$t{$b}<=>$t{$a}}keys%t'
0 голосов
/ 25 июня 2010

Пытался сделать его как можно меньше запутанным :) Сортирует вывод по тегу.

perl -alne '$counts{$F[1]} += $F[0]; END { print "$counts{$_} $_" for sort(keys %counts) }'

0 голосов
/ 25 июня 2010

Насколько я могу это сделать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...