给出以下输入:
256 1 4 1 130.363
256 1 4 2 128.332
256 1 4 3 130.262
256 1 4 4 128.395
256 1 4 5 128.484
64 2 4 1 95.227
64 2 4 2 96.582
64 2 4 3 95.785
64 2 4 4 93.944
64 2 4 5 97.398
64 4 4 1 143.519
64 4 4 2 143.579
64 4 4 3 143.937
64 4 4 4 142.292
64 4 4 5 143.304
我试图获得给定行数的平均值。在这种情况下,我有第4列指示的 5 样本。所以预期的输出应该是:
256 1 4 129.167
64 2 4 95.787
64 4 4 143.326
要循环播放,我尝试了类似
的内容awk 'BEGIN {i = 1; while (s[$4] <= 5) { print $4 } }'
但它甚至不打印我想要的东西。也尝试了这个
awk '{array[$1" "$2]+=$5} END { for (i in array) {print i" " array[i]/length(array)}}'
答案 0 :(得分:3)
$ awk '{curr = $1 OFS $2 OFS $3} curr!=prev {if (cnt) print prev, sum/cnt; prev=curr; sum=cnt=0} {sum+=$5; cnt++} END{if (cnt) print prev, sum/cnt}' file
256 1 4 129.167
64 2 4 95.7872
64 4 4 143.326
这和@NinjaGaiden解决方案之间的区别在于:
答案 1 :(得分:1)
试试这个
awk '{k=$1" "$2" "$3; j[k]+=$5;z[k]+=1} END { for (x in j) { print x,j[x]/z[x] }} ' f
答案 2 :(得分:0)
awk '{array[$1" "$2" "$3]+=$5} END { for (i in array) {print i" " array[i]/length(array)}}'
答案 3 :(得分:0)
这也可以使用可变数量的行
NaN