awk或grep估计平均值

时间:2017-07-03 15:30:15

标签: awk grep

我想平均一组同名变量,例如:

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

这可能吗?

3 个答案:

答案 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