我有一堆变量,如下所示:
(DURATION 1.57) + (DURATION 2.07)
(T0 10) (T1 0) (TX 0) + (T0 12) (T1 0) (TX 1)
(TC 1) (IG 0) + (TC 2) (IG 3)
是否可以让 awk 处理这个结果,结果是:
(DURATION 3.64)
(T0 22) (T1 0) (TX 1)
(TC 3) (IG 3)
或者有人可以推荐另一个我可以用来做到这一点的unix程序吗?
这是一种方法:
awk '{
gsub(/[()+]/, "")
for(nf=1; nf<=NF; nf+=2) {
flds[$nf] += $(nf+1)
}
sep = ""
for(fld in flds) {
printf "%s(%s %g)", sep, fld, flds[fld]
sep = FS
}
print "";
delete flds
}' file
(DURATION 3.64)
(T0 22) (T1 0) (TX 1)
(TC 3) (IG 3)
- 我们删除特殊字符
()+
using gsub()
功能。
- 我们迭代所有字段,将变量添加到数组中并添加值
- 我们迭代数组,以我们想要的格式打印它们。
- 打印完成后添加新行
- 删除数组,以便我们可以在下一行重新使用它
-
Note:行的顺序将与输入文件相同,但使用
in
运营商为我们for loop
每行上的变量可能以随机顺序出现。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)