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
问题是针对 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