基于字段值的awk计算

时间:2015-05-04 22:55:44

标签: csv awk gawk bsd

BIG EDIT

我对计算有误解,所以我需要重新做这个。

原始样本数据:

2600,AEIOU-2600,stack,01,04/28/2015,C C R,S,1.07
2600,AEIOU-2600,stack,02,04/01/2015,C C S,S,10.65
2601,"over, L.P. - 00001",stack,01,04/01/2015,C C S,s,16.43
2601,"over, L.P. - 000001",stack,02,04/01/2015,D C S,s,17.16
2602,UEIA,stack,01,04/28/2015,C C R,s,10
2602,UEIA,stack,02,04/28/2015,C C R,s,20

字段$ 1:数字

字段$ 2:名称

字段$ 3:帐户

字段$ 4:发票编号

字段$ 5:日期

字段$ 6:输入

Field $ 7:州

字段$ 8:金额

脚本:

#!/usr/local/bin/gawk -f

BEGIN {
FPAT = "\"[^\"]*\"|[^,]*"

OFS = ","
}
NR > 1 {
arr[$1 OFS $2 OFS $6]++
}
END {
for (key in arr)
    print key, arr[key]
}

上面的脚本输出:

2601,"over, L.P. - 000001",D C S,1
2601,"over, L.P. - 00001",C C S,1
2602,UEIA,C C R,2
2600,AEIOU-2600,C C S,1

我需要根据字段$ 1进行分组,然后将字段$ 6分组。

脚本运行后,将生成如下所示的数据:

2600,AEIOU-2600,C C R,1,1.07
2600,AEIOU-2600,C C S,1,10.65
2601,"over, L.P. - 00001",C C S,2,33.59
2602,UEIA,C C R,2,30

我们看到2600有两种不同的类型,所以它们各自有自己的线,我们看到2601有两个C C S组合是33.59。基本上按字段$ 1分组,然后按字段$ 6分组。

那么我可以将C C R和C C A的结果乘以.02(出现次数)以及其他所有结果* .02 * .0013。

2600,AEIOU-2600,C C R,1,1.07,0.0214
2600,AEIOU-2600,C C S,1 10.65,0.0002769
2601,"over, L.P. - 00001",C C S,2,33.59,0.00087334
2602,UEIA,C C R,2,30,0.00078

字段$ 1:数字

字段$ 2:名称

字段$ 3:输入

字段$ 4:发生次数

总计$ 5

字段$ 5:calc_total

修改

#!/usr/local/bin/gawk -f

BEGIN {
FPAT = "\"[^\"]*\"|[^,]*"

OFS = ","
}
NR > 1 {
    arr[$1 OFS $2 OFS $6 OFS $8]++
}
END {
    for (key in arr)
        print key, arr[key]
}

这种情况越来越好但现在我需要第二组并按字段$ 3分组。现在,上面的脚本分组为1美元,然后是5美元。

0 个答案:

没有答案