
このような記録があります。 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 - 一意のID
- 列2 - 列Aを追加
- 列3 - 列Bの追加
- 列4 - A個数+B個数
答え1
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