Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to sum up every 10 lines and calculate average using AWK?

Tags:

awk

I have a file containing N*10 lines, each line consisting of a number. I need to sum up every 10 lines and then print out an average for every such group. I know it's doable in awk, I just don't know how.

like image 275
gablin Avatar asked Dec 18 '11 11:12

gablin


2 Answers

Try something like this:

$ 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

(Adapt for 10-line blocks, obviously.)

like image 169
Mat Avatar answered Sep 20 '22 22:09

Mat


May be something like this -

[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

If you don't want all lines to be printed then the following would work.

[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
like image 32
jaypal singh Avatar answered Sep 19 '22 22:09

jaypal singh