在awk中添加矩阵

时间:2014-05-08 02:21:02

标签: awk

我有一堆看起来像这样的变量:

(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程序吗?

1 个答案:

答案 0 :(得分:2)

这是一种方法:

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)
  • 我们使用()+函数删除特殊字符gsub()
  • 我们遍历所有字段,将变量添加到数组并添加值
  • 我们遍历数组,以我们想要的格式打印它们。
  • 完成打印后添加新行
  • 删除数组,以便我们可以在下一行重复使用
  • 注意:行的顺序与输入文件相同,但使用in运算符代表for loop每行的变量可能会以随机顺序显示。