2011-12-18 35 views

risposta

14

provare qualcosa di simile:

$ 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 

(adatto per blocchi di 10 linee, ovviamente.)

+2

Si sarebbe potuto usare 'seq' per astrarre l'input di test:' seq 50 | awk '{sum + = $ 1} (NR% 10) == 0 {print sum/10; sum = 0;} '' – progo

+0

Hm, non sembra funzionare nel mio caso. Potrebbe il fatto che sto lavorando su valori decimali ha qualcosa a che fare con questo? – gablin

+0

@gablin: quello che ho postato funziona bene con valori decimali. – Mat

1

può essere qualcosa di simile -

[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 

Se non si desidera tutte le linee da stampare allora funzioneranno le seguenti.

[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 
Problemi correlati