Я хочу обработать какой-нибудь файл журнала, формат которого такой:
<itemA> <num> <itemB> <num> <itemC> <num>
Я хочу получить резюме, содержащее следующую информацию
для каждого элемента я хочу знать диапазон поля <num> и среднее значение <num>
<num>
use Statistics::Lite; while (<>) { my ($a,$b) = split; push(@{$items{$a}},$b); } foreach my $key (keys %items) { print "$key\n"; print Statistics::Lite::statsinfo(@{$items{$key}}); }
Очевидно, вы могли бы делать статистику вручную, но ... зачем?
Я согласен с Сетом и предпочитаю его ответ.Вот ручное решение в Awk, для учебных целей:
#!/usr/bin/awk -f #invoke with: < infile stats.awk { i = $1; v = $2; count[i]++; sum[i] += v; if (v > max[i] || count[i] == 1) { max[i] = v }; if (v < min[i] || count[i] == 1) { min[i] = v }; } END { for (i in count) { print i " range: " min[i] ".." max[i] " avg: " sum[i] / count[i] }; }