2015-05-25 108 views
0

想要根據Start Date ($1)End Date ($2)生成連續日期。 示例中還涵蓋了閏年。根據起始日期和結束日期生成一個日期序列

INPUT.TXT

02-JUL-2015,04-JUL-2015 
28-FEB-2016,02-MAR-2016 
30-DEC-2013,01-JAN-2014 
12-AUG-2012,14-AUG-2012 

試圖像下面的命令,並完成:

#!/usr/bin/gawk -f 
BEGIN {FS=","} 
{ 
    split($1,s,"-") 
    split($2,e,"-") 
    st=mktime(s[3] " "(index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",s[2])+2)/3" " s[1] " 0 0 0") 
    et=mktime(e[3] " "(index("JANFEBMARAPRMAYJUNJULAUGSEPOCTNOVDEC",e[2])+2)/3" " e[1] " 0 0 0") 
    for (i=st;i<=et;i+=60*60*24) print strftime("%d-%b-%Y",i) 
} 

所需的輸出:

02-JUL-2015 
03-JUL-2015 
04-JUL-2015 
28-FEB-2016 
29-FEB-2016 
01-MAR-2016 
02-MAR-2016 
30-DEC-2013 
31-DEC-2013 
01-JAN-2014 
12-AUG-2012 
13-AUG-2012 
14-AUG-2012 

請!!!建議

+0

我得到了一個不同的錯誤,可以通過將'BEGIN {FS =「,」}'移出catch-all模塊來解決。 – Wintermute

+0

@Wintermute,非常感謝輸入,我已更新腳本 – VNA

+0

@EdMorton,非常感謝投入! – VNA

回答

2

更改print strftime("%d-%b-%Y",i)print toupper(strftime("%d-%b-%Y",i))

獲得Arnold Robbins編寫的Effective Awk Programming第4版。

+0

他喜歡叫阿哈龍羅賓斯! ':P' –

+1

我從他那裏收到的電子郵件是簽名爲「Arnold」,並且更重要的是他在書上的名字是作者是「Arnold」(請參閱​​http://shop.oreilly.com/product/0636920033820.do)。儘管如此,我確實錯過了他姓中的第二個'b',現在已經得到糾正。 –

+1

我只是在和你搞混! :) –

相關問題