按唯一 ID 添加和减去值组

按唯一 ID 添加和减去值组

我有这样的记录:如果是DEL,我必须添加/减去第2列和第4列的值。

12345)63)ADD)3
12345)40)ADD)2
12345)40)ADD)2
12345)40)DEL)2
67892)30)ADD)5
67892)-20)ADD)3

输出应该是:

12345|103|5|108
67892|10|8|18
  1. 第 1 列 - 唯一 ID
  2. 第 2 列 - 添加 A 列
  3. 第 3 列 - 添加 B 列
  4. 第 4 列 - 计数 A + 计数 B

答案1

一种方法是使用awk效用如图:

awk -F ')' -v OFS='|' '
prev != $1 {
  if (NR > 1) {
    dump(prev, s[2], s[4])
  }
  s[2] = s[4] = 0
  prev = $1
}
{
  mult = $3 == "ADD" ? 1 : -1
  for (i in s) s[i] += mult * $(i)
}
END {
  dump(prev, s[2], s[4])
}
function dump(p,a,b,  t) {
  t = a+b
  print p, a, b, t 
}
' file

输出:

12345|103|5|108
67892|10|8|18

相关内容