고유 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 -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

관련 정보