awk处理案例十二--进行分段统计累加

【应用场景】--描述如下

有如下文本:

account         time              dept: 1号
--------------------------------------------------------------------------
A4                 2                  60.00
A3                 3                  120.00
B16                6                  90.00

total             11                 270.00

16               10                  400.00
16               2                   100.00

total               12                   500.00
------------------------------------------------------------------------account         time              dept: 2号
-------------------------------------------------------------------------- A4 1 30.00 A3 2 80.00 B15 4 60.00 total 7 170.00 16 5 200.00 16 2 100.00 total 7 300.00 . . . .. 希望通过简短的awk计算得出如下结果(即把每个部门的“本项合计”统计累加): 1号 23 770.00 2号 14 470.00 3号…………….. 4号…………

【代码】

awk '/dept/{i++;a[i]=$4;next}/total/{x[i]+=$2;y[i]+=$3}END{for(j=1;j<=i;j++)print a[j],x[j],y[j]}'

【解析】
 该代码的精华在于i的妙用!有了这个i;数组就可以全部打印出来

【测试如下】

[li0924@localhost awk]$ awk '/dept/{i++;a[i]=$4;next}/total/{x[i]+=$2;y[i]+=$3}END{for(j=1;j<=i;j++)print a[j],x[j],y[j]}' cc
1号 23 770
2号 14 470

 

 

posted @ 2013-09-29 23:39  lottu  阅读(843)  评论(0)    收藏  举报