返回空白输出的Awk脚本

返回空白输出的Awk脚本,awk,Awk,以下是输入数据另存为sample.csv aNumber|bNumber|startDate|timeZone|duration|currencyType|cost|dicatedAccused|balanceAfter|trafficCase|teleServiceCode|location|dataVolume|numberOfEvents|fafIndicator|netWorkID|serviceProvideID|serviceClass|nAno|nBno|bNumberZnCode

以下是输入数据另存为sample.csv

aNumber|bNumber|startDate|timeZone|duration|currencyType|cost|dicatedAccused|balanceAfter|trafficCase|teleServiceCode|location|dataVolume|numberOfEvents|fafIndicator|netWorkID|serviceProvideID|serviceClass|nAno|nBno|bNumberZnCode|fileNamedID|Destination|Operator|unknown3|MainAmount|ReAnalyse|DEDICATEDACCBALBEF|DEDICATEDACCBALAFT|ACCOUNTGROUPID|SERVICEOFFERINGS|SELECTEDCOMMUNITYID|BALANCEBEFORE
22677512549|778|2014-07-02 10:16:35.000|NULL|NULL|localCurrency|0.00|NULL|11.50|0|4|22676020076|NULL|NULL|NULL|NULL|NULL|34|77512549|778|NULL|1131257|OTHER|Short Code|126244088|0.0000|0|NULL|NULL|NULL|NULL|NULL|11.5000
22675557361|76457227|2014-07-02 10:16:38.000|NULL|NULL|localCurrency|10.00|NULL|1009.10|0|4|22676613028|NULL|NULL|1|NULL|NULL|35|75557361|76457227|NULL|1131257|Airtel|Airtel|4132206314|10.0000|0|NULL|NULL|NULL|NULL|NULL|1019.1000
22677521277|778|2014-07-02 10:16:42.000|NULL|NULL|localCurrency|0.00|NULL|0.00|0|4|22676020078|NULL|NULL|NULL|NULL|NULL|34|77521277|778|NULL|1131257|OTHER|Short Code|130071591|0.0000|0|NULL|NULL|NULL|NULL|NULL|0.0000
22676099496|77250331|2014-07-02 10:16:42.000|NULL|NULL|localCurrency|1.00|9|0.50|0|4|22676613028|NULL|NULL|NULL|NULL|NULL|35|76099496|77250331|NULL|1131257|Airtel|Airtel|4132218551|0.0000|0|4.0000|3.0000|NULL|NULL|NULL|0.5000
22667222160|22667262389|2014-07-02 10:16:43.000|NULL|NULL|localCurrency|10.00|NULL|16070.00|0|4|22676613028|NULL|NULL|NULL|NULL|NULL|35|67222160|67262389|NULL|1131257|Airtel|Airtel|4132222628|10.0000|0|NULL|NULL|NULL|NULL|NULL|16080.0000
22665799922|70110055|2014-07-02 10:16:45.000|NULL|NULL|localCurrency|20.00|6|0.50|0|4|22676020076|NULL|NULL|NULL|NULL|NULL|35|65799922|70110055|NULL|1131257|Telmob|Telmob|126260244|20.0000|0|44.0000|24.0000|NULL|NULL|NULL|0.5000
22676239633|433|2014-07-02 10:16:48.000|NULL|NULL|localCurrency|0.00|NULL|0.20|0|4|22676020027|NULL|NULL|NULL|NULL|NULL|35|76239633|433|NULL|1131257|Airtel_TollFree|Short Code|397224944|0.0000|0|NULL|NULL|NULL|NULL|NULL|0.2000
我必须按日期、指示累计、trafficCase和teleserviceCode进行分组,然后根据分组结果,我必须总结持续时间、成本、之后的余额、主要金额和之前的余额。我使用了awk脚本,如下所示:

以下是我正在使用的awk脚本(另存为test.awk):

当我运行我的awk脚本时:

$ awk -f test.awk sample.csv
除了标题外,我的输出为空

date         dAccused  TrafficCase  ServiceCode   Duration       Cost BalanceAfter MainAmount  DAcBlBefore   DAcBlAfter BalanceBefore
我预计产出为:

date       dAccused TrafficCase ServiceCode Duration    Cost    BalanceAfter    MainAmount  DAcBlBefore DAcBlAfter  BalanceBefore   
2014-07-02   6       0           4           0           20      0.5             20             0            44          0.5    
2014-07-02  NULL     0           4           0           10      17090,8         20             0            0          17110,8 
2014-07-02   9       0           4           0            1      0,5             0              0            4           0,5    

有人能帮我找出我的脚本出了什么问题吗?

您的规则
FNR=1
是一个赋值,而不是测试,因此每行的计算结果都是true。您应该将其更改为
FNR==1

除了简单的语法错误之外,您当前形式的脚本也为我产生了很多语法错误,这是因为您在同一行上有很多语句,没有任何
分离它们。如果要使用awk脚本,而不是单行程序,则应添加一些换行符以使脚本更具可读性:

BEGIN { FS = "|" }
FNR == 1 { next }
{ 
    sub(/ .*/,"",$3) 
    key=sprintf("%10s %10s %12s %12s",$3,$8,$10,$11)
    duration[key] += $5 
    cost[key] += $7 
    bAfter[key] += $9 
    main[key] += $26 
    dedAccbBefore[key] += $27 
    dedAccbAfter[key] += $28 
    bBefore[key] += $NF
}
END {
    printf "%-10s\t\t %10s %12s %12s %10s %10s %10s %10s %12s %12s %10s\n", 
        "date","dAccused","TrafficCase","ServiceCode","Duration","Cost","BalanceAfter","MainAmount","DAcBlBefore","DAcBlAfter","BalanceBefore" 
    for (i in duration) { 
        printf "%-47s %10s %10s %10s %10s %10s %10s\t %10s\n", 
            i,duration[i],cost[i],bAfter[i],main[i],dedAccbBefore[i],dedAccbAfter[i],bBefore[i] 
    }
}
以下是我在文件上运行上述脚本得到的输出:

$ awk -f test.awk file                                                  
date                       dAccused  TrafficCase  ServiceCode   Duration       Cost BalanceAfter MainAmount  DAcBlBefore   DAcBlAfter BalanceBefore
      NULL          0  22676020027         NULL          0        0.2          4          0          0          0                 0
    0.0000       NULL       0.2000                       0          0          0          0          0          0               0.2
      NULL          0  22676020078         NULL          0          0          4          0          0          0                 0
      NULL          0  22676613028         NULL         21    17079.6         12          4          3          0           17099.6
    0.0000       NULL      11.5000                       0          0          0          0          0          0              11.5
    0.0000       NULL       0.0000                       0          0          0          0          0          0                 0
      NULL          0  22676020076         NULL         20         12          8         44         24          0               0.5
2014-07-02                                               0          0          0          0          0          0             14098

awk:so.awk:10:(FILENAME=TEST.csv FNR=2)致命:尝试访问字段-2这里是我将FNR=1更改为FNR==1I时收到的错误消息,我无法重现该消息。我已经将我得到的输出添加到我的回答中。我使用了你给出的“更正脚本”,但我只有0作为返回值。我不确定你的意思。也许你可以编辑你的问题,让它清楚你得到了什么输出。不管怎样,如果我不能重现您的问题,我真的不知道如何进一步帮助您。@SPHINX
尝试访问字段-2
FNR
无关,因此更改它并没有导致此错误,它可能只是让脚本走得太远而失败了。
$ awk -f test.awk file                                                  
date                       dAccused  TrafficCase  ServiceCode   Duration       Cost BalanceAfter MainAmount  DAcBlBefore   DAcBlAfter BalanceBefore
      NULL          0  22676020027         NULL          0        0.2          4          0          0          0                 0
    0.0000       NULL       0.2000                       0          0          0          0          0          0               0.2
      NULL          0  22676020078         NULL          0          0          4          0          0          0                 0
      NULL          0  22676613028         NULL         21    17079.6         12          4          3          0           17099.6
    0.0000       NULL      11.5000                       0          0          0          0          0          0              11.5
    0.0000       NULL       0.0000                       0          0          0          0          0          0                 0
      NULL          0  22676020076         NULL         20         12          8         44         24          0               0.5
2014-07-02                                               0          0          0          0          0          0             14098