我有数据集外观:
A 10
A 12
A 13
B 10
B 25
B 66
B 80
C 2
C 3
我能够使用每个相同行的AWK平均值进行计算(使用数组)。我想在脚本中添加最小值和最大值。有什么想法吗?
我的剧本:
awk -v OFS="\t" '{v[$1]+=$2; n[$1]++}END {for (l in n) {print l "\t" v[l] / n[l]}}' > out.txt
感谢您的任何建议。
答案 0 :(得分:2)
这段代码读起来应该是微不足道的
$ awk '{k=$1; v=$2; sum[k]+=v; count[k]++}
!(k in min){min[k]=max[k]=v}
min[k]>v{min[k]=v}
max[k]<v{max[k]=v}
END{for(k in sum) print k,min[k],max[k],sum[k]/count[k]}' file |
column -t
A 10 13 11.6667
B 10 80 45.25
C 2 3 2.5
答案 1 :(得分:1)
扩展您的代码:
$ cat foo.awk
{
v[$1]+=$2
n[$1]++
if(min[$1]>$2||min[$1]=="")
min[$1]=$2
if(max[$1]<$2)
max[$1]=$2
}
END {
for (l in n)
print l, v[l] / n[l], min[l], max[l]
}
$ awk -v OFS="\t" -f foo.awk foo.txt
A 11.6667 10 13
B 45.25 10 80
C 2.5 2 3
答案 2 :(得分:0)
一种方法可能是创建另外两个数组:一个用于最大值,另一个用于最小值。