awk处理案例二十四--一个复杂的sql

原帖http://www.itpub.net/thread-1835425-1-2.html

【场景】

insert into test values('a','20131213','EQ',131313,333333)
insert into test values('a','20131216','EQ',161616,666666)
insert into test values('a','20131217','EQ',171717,777777)
insert into test values('c','20131218','EQ',181818,888888)
insert into test values('c','20131219','EQ',191919,999999)
insert into test values('e','20131220','EQ',202020,222222)
insert into test values('f','20131223','FI',234324,123213)
insert into test values('g','20131224','FI',242424,444444)
insert into test values('g','20131225','FI',252525,555555)

calculate:  (quantity(t)+cashflow(t)-quantity(t-1))/quantity(t-1)  depend on the entity,entity_type,effectivedate
          t:指effectivedate,t-1:指前一天(需要判断是否工作日,即如果 t是周一 则t-1就是上周五)
          如果quantity(t-1)没有数,则不需要计算

结果应该只有四条记录:
entity    entity_type                             effectivedate   result
a         EQ                                      20131216        666666+161616-333333/333333
a         EQ                                      20131217        777777+171717-666666/666666
c         EQ                                      20131219        999999+191919-888888/888888
g         FI                                      20131225        555555+252525-444444/444444

 【代码】--我用awk来实现

> awk -F"," 'FNR>1{getline d < "lottu11";split(d,a,",");if($1==a[1])print $1,$3,$2,($4+$5-a[5])/a[5]}' lottu11
    a EQ 20131216 1.48485
    a EQ 20131217 0.424242
    c EQ 20131219 0.340909
    g FI 20131225 0.818182
> cat lottu11
    a,20131213,EQ,131313,333333
    a,20131216,EQ,161616,666666
    a,20131217,EQ,171717,777777
    c,20131218,EQ,181818,888888
    c,20131219,EQ,191919,999999
    e,20131220,EQ,202020,222222
    f,20131223,FI,234324,123213
    g,20131224,FI,242424,444444
    g,20131225,FI,252525,555555

【解析】

 首先我想到是利用数组,建一个二维数组,a[i,$1];其中i表示$1是第几次出现;想了下,这样实现的话,代码是比较长!

所以想到用这样来实现就比较简单;例如一行是这样的,就很容易能实现了;所以采用getline的用法。

 a,20131216,EQ,161616,666666 a,20131213,EQ,131313,333333

 

posted @ 2013-12-17 22:31  lottu  阅读(433)  评论(0)    收藏  举报