awk sum分组收集

时间:2016-01-12 09:58:48

标签: awk ksh

问题是awk脚本(几周前ref之前的问题)但有点复杂。

输入文件看起来:

Group1
id        val1     val2
---------------------------
idone      2        10
idone      3        12
idone      6         9
idtwo      8         3
idtwo     14         1

Subtotal  33        35


Group2
id        val1     val2 
------------------------ 
idone     2         3
idone     1         4
idtwo     3         6
idtwo     4         7

Subtotal 10        20

Total    43        55

可能会有更多组,每组中有更多条目。 我将我的例子限制为2个详细名称idone,idtwo和2组。

现在的目的是对它们进行总结 结果为:

          val1      val2

idone      14         38
idtwo      29         17

total      43         55     

输出布局可自由选择: 如果你愿意,它也可能看起来像这样:

total_idone_val1=14
total_idone_val2=38  
total_idtwo_val1=29
total_idtwo_val2=17

overall_total_val1=43
overall_total_val2=55   

1 个答案:

答案 0 :(得分:1)

试试这个awk cmd:

 awk 'NF==3&&FNR>3&&!/[Tt]otal/{v1[$1]+=$2;v2[$1]+=$3}END{print "id","v1","v2";
                for(x in v1){
                print x,v1[x],v2[x]
                s1+=v1[x]
                s2+=v2[x]
        }
        print "total",s1,s2}' f1 f2

它给出了:

id v1 v2
idtwo 29 17
idone 14 38
total 43 55