Как мне обработать этот файл с помощью awk или perl? - PullRequest
1 голос
/ 05 июня 2011

Я хочу обработать какой-нибудь файл журнала, формат которого такой:

<itemA>    <num>
<itemB>    <num>
<itemC>    <num>

Я хочу получить резюме, содержащее следующую информацию

для каждого элемента я хочу знать диапазон поля <num> и среднее значение <num>

Ответы [ 2 ]

5 голосов
/ 05 июня 2011
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}});
}

Очевидно, вы могли бы делать статистику вручную, но ... зачем?

3 голосов
/ 05 июня 2011

Я согласен с Сетом и предпочитаю его ответ.Вот ручное решение в 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] 
  }; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...