如何每10行求和并使用AWK计算平均值?

如何每10行求和并使用AWK计算平均值?,awk,Awk,我有一个包含N*10行的文件,每行由一个数字组成。我需要每10行汇总一次,然后打印出每一组的平均值。我知道这在awk中是可行的,我只是不知道怎么做。试试这样的方法: $ 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个行块。)可能是这样的- [jaypal:~/Temp] seq 20 > test.file [ja

我有一个包含N*10行的文件,每行由一个数字组成。我需要每10行汇总一次,然后打印出每一组的平均值。我知道这在
awk
中是可行的,我只是不知道怎么做。

试试这样的方法:

$ 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个行块。)

可能是这样的-

[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

您可以使用
seq
来提取测试输入:
seq 50 | awk'{sum+=$1}(NR%10)==0{print sum/10;sum=0;}'
Hm,在我的情况下它似乎不起作用。我正在研究十进制值这一事实是否与此有关?我发现了问题所在。我的行实际上并不是完全由数字组成,而是在它之前的一些文本字符串。所以在我的例子中,它应该是
$4
,而不是
$1
。现在它开始工作了。谢谢!=)