文件中特定行的平均值

时间:2016-03-21 12:57:34

标签: awk

我的文件有6行。我需要找到文件中特定行的平均值,而其他行应保持不变。应计算A1和A2,B1和B2的平均值,其他线应保持原样

输入:

A1  1   1   2
A2  5   6   1   
A3  1   1   1   
B1  10  12  12
B2  10  12  10
B3  100 200 300

输出:

A1A2  3    3.5   1.5     
A3    1    1     1
B1B2  10   12    11    
B3    100  200   300

编辑:总共有n

2 个答案:

答案 0 :(得分:1)

awk救援!

$ awk '/[AB][12]/{a=substr($1,1,1);
                  k=a"1"a"2";
                  c1[k]+=$2; c2[k]+=$3; c3[k]+=$4; n[k]++; next} 
               1; 
             END{for(k in c1) 
                     print k, c1[k]/n[k], c2[k]/n[k], c3[k]/n[k]}' file | sort | column -t

A1A2  3    3.5  1.5
A3    1    1    1
B1B2  10   12   11
B3    100  200  300

模式匹配分组行,创建密钥,计算所有字段的总和和每个密钥的行数;打印不匹配的行;完成后打印平均行,因为订单不会保留排序和管道到column以便于格式化。

答案 1 :(得分:0)

$ cat tst.awk
$1 ~ /^[AB]1$/ { for (i=2;i<=NF;i++) val[$1,i]=$i; next }
$1 ~ /^[AB]2$/ { p=$1; sub(2,1,p); $1=p $1; for (i=2;i<=NF;i++) $i=($i + val[p,i])/2 }
{ print }

$ awk -f tst.awk file | column -t
A1A2  3    3.5  1.5
A3    1    1    1
B1B2  10   12   11
B3    100  200  300