2011-12-18 17 views

Respuesta

14

intente algo como esto:

$ 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 para bloques de 10 líneas, obviamente.)

+2

Puede haber usado 'seq' para abstraer la entrada de prueba:' seq 50 | awk '{suma + = $ 1} (NR% 10) == 0 {imprimir suma/10; sum = 0;} '' – progo

+0

Hm, parece que no funciona en mi caso. ¿El hecho de que estoy trabajando en valores decimales tiene algo que ver con eso? – gablin

+0

@gablin: lo que he publicado funciona bien con valores decimales. – Mat

1

Puede ser algo como esto -

[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 

Si no desea todas las líneas que se imprimirán, entonces lo siguiente funcionaría.

[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 
Cuestiones relacionadas