2013-07-16 27 views
1

我需要你的幫助。

文件只有日期,

file.txt的

P1,2013/jul/9,2013/jul/14 
P2,2013/jul/14,2013/jul/6 
P3,2013/jul/7,2013/jul/5 

顯示輸出這樣

P1,2013/jul/9,2013/jul/14,5days 
P2,2013/jul/14,2013/jul/6,8days 
P3,2013/jul/7,2013/jul/5,2days 
+2

看看'awk的 - > mktime' [時間函數(HTTP:// WWW。 gnu.org/software/gawk/manual/html_node/Time-Functions.html) – captcha

+0

@captcha如果你使用mktime,如何將'jul'轉換爲'7',建立一個字典/數組? – Kent

+0

@Kent是的,Windows shell沒有像'bash'這樣的'date'函數。 – captcha

回答

1

我不認爲mktime()針對此問題的最佳選擇。我會去與外部date命令:

awk -F'[,/]' '{ 
"date -d\""$3"-"$4"-"$2"\" +%s"|getline d1 
"date -d\""$6"-"$7"-"$5"\" +%s"|getline d2 
x=d1-d2; x=x<0?-x:x;x/=3600*24; 
print $0","x" days" 
}' file 

輸出

P1,2013/jul/9,2013/jul/14 ,5 days 
P2,2013/jul/14,2013/jul/6 ,8 days 
P3,2013/jul/7,2013/jul/5 ,2 days 
4
awk ' 
    BEGIN { 
     months = "jan feb mar apr may jun jul aug sep oct nov dec" 
     OFS = FS = "," 
    } 
    function date2time(date,  a,mon) { 
     split(date, a, "/") 
     mon = 1 + (index(months, a[2])-1)/4 
     return mktime(a[1] " " mon " " a[3] " 0 0 0") 
    } 
    function abs(n) { 
     return n<0 ? -n : n 
    } 
    function diff_days(d1,d2, delta) { 
     delta = date2time(d1) - date2time(d2) 
     return int(abs(delta)/86400) 
    } 

    { print $0, diff_days($2, $3) "days" } 
' 
P1,2013/jul/9,2013/jul/14 ,5days 
P2,2013/jul/14,2013/jul/6 ,8days 
P3,2013/jul/7,2013/jul/5 ,2days