Как суммировать каждые 10 строк и рассчитывать среднее с помощью AWK? - PullRequest
10 голосов
/ 18 декабря 2011

У меня есть файл, содержащий N * 10 строк, каждая строка состоит из числа. Мне нужно подвести итоги каждые 10 строк, а затем распечатать среднее для каждой такой группы. Я знаю, что это возможно в awk, я просто не знаю как.

Ответы [ 2 ]

16 голосов
/ 18 декабря 2011

Попробуйте что-то вроде этого:

$ cat input 
1
2
3
4
5
6
2.5
3.5
4
$ awk '{sum+=$1} (NR%3)==0{print sum/3; sum=0;}' input 
2
5
3.33333

(Адаптируется для блоков из 10 строк, очевидно.)

1 голос
/ 19 декабря 2011

Может быть что-то вроде этого -

[jaypal:~/Temp] seq 20 > test.file

[jaypal:~/Temp] awk '
{sum+=$1} 
(NR%10==0){avg=sum/10;print $1"\nTotal: "sum "\tAverage: "avg;sum=0;next}1' test.file
1
2
3
4
5
6
7
8
9
10
Total: 55   Average: 5.5
11
12
13
14
15
16
17
18
19
20
Total: 155  Average: 15.5

Если вы не хотите, чтобы печатались все строки, сработало бы следующее:

[jaypal:~/Temp] awk '
{sum+=$1} 
(NR%10==0){avg=sum/10;print "Total: "sum "\tAverage: "avg;sum=0;next}' test.file
Total: 55   Average: 5.5
Total: 155  Average: 15.5
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...