我想平均一组同名变量,例如:
Blue 0.2
Blue 0.3
Blue 0.6
Red 0.4
Red 0.9
Green 0.5
获得;
Blue 0.3666667
Red 0.65
Green 0.5
这可能吗?
答案 0 :(得分:1)
尝试:
awk '{A[$1]=A[$1]+$2;if(!C[$1]++){i++};B[i]=$1;} END{for(j=1;j<=i;j++){printf("%s %.03f\n",B[j],A[B[j]]/C[B[j]])}}' Input_file
也会很快添加解释。
EDIT1:现在成功添加非单线形式的解决方案。
awk '{
A[$1]=A[$1]+$2;
if(!C[$1]++){
i++
};
B[i]=$1;
}
END{
for(j=1;j<=i;j++){
printf("%s %.03f\n",B[j],A[B[j]]/C[B[j]])
}
}
' Input_file
答案 1 :(得分:1)
使用 awk 的多维数组:
awk '{ a[$1]["s"]+=$2; a[$1]["c"]++ }
END{ for(i in a) print i,a[i]["s"]/a[i]["c"] }' OFS='\t' file
a[$1]["s"]+=$2
- 总结相同颜色的值
a[$1]["c"]++
- 计算重复的颜色
输出:
Red 0.65
Blue 0.366667
Green 0.5
答案 2 :(得分:1)
使用awk你可以制作两个数组,一个用于保存每种颜色的数量和一个数量的总和,然后在最后打印平均值:
awk '{ a[$1]+=$2;b[$1]++ } END { for (i in a) print i"\t"a[i]/b[i] }' file