2017-07-03 51 views
-2

我想同样平均命名变量的列表,例如: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 

这可能吗?

+1

你有什么试过? – hek2mgl

回答

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

使用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 
1

使用awk可以使两个数组,一个让每个颜色和量一个用于计数的总和,然后打印平均值为结束:

awk '{ a[$1]+=$2;b[$1]++ } END { for (i in a) print i"\t"a[i]/b[i] }' file 
+1

@EdMorton感谢您的反馈:)。你完全正确,我已经更新了我的答案。 – archemiro