awk sum 分组收集

awk sum collect in groups

问题是针对 awk 脚本的(参考几周前的上一个问题)但有点复杂。

输入文件看起来:

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   

试试这个 awk 命令:

 awk 'NF==3&&FNR>3&&!/[Tt]otal/{v1[]+=;v2[]+=}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