用AWK计算

时间:2013-11-28 18:06:56

标签: awk

我需要在awk中执行计算。对于每个阵列[$ 1,$ 2],我需要检查3美元。如果是“5310”,则$ 4中的值为positiv,否则该值为negativ。 最后,我需要从每array[$1,$2]

的positiv值中减去所有的负值

输入

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

1 个答案:

答案 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