我需要在awk中执行计算。对于每个阵列[$ 1,$ 2],我需要检查3美元。如果是“5310”,则$ 4中的值为positiv,否则该值为negativ。
最后,我需要从每array[$1,$2]
输入
K019001^ABC^531^12
K019001^ABC^601^12
K019002^ABC^531^100
K019002^ABC^601^40
K019003^ABC^531^50
K019003^ABC^601^30
K019003^ABC^601^40
K019004^ABC^531^10
期望的输出
K019001^ABC^0
K019002^ABC^60
K019003^ABC^-20
K019004^ABC^10
答案 0 :(得分:4)
使用此awk:
awk 'BEGIN {FS=OFS=SUBSEP="^"} {a[$1,$2] += $4 * ($3==531 ? 1 : -1)}
结束{for(i in a)print i,a [i]}'file
K019001^ABC^0
K019004^ABC^10
K019002^ABC^60
K019003^ABC^-20
UPDATE ::要获得正确的订购:
awk 'BEGIN{FS=OFS="^"} {k=$1 FS $2; if (!a[k]) b[c++]=k} $3==531{a[k]+=$4; next} {a[k]-=$4}
END {for (i=0; i<length(b); i++) print b[i], a[b[i]]}' file
K019001^ABC^0
K019002^ABC^60
K019003^ABC^-20
K019004^ABC^10