2012-07-20 147 views
1

我想編寫打印出日期按以下格式bash腳本:打印日期

20120205_16 
(year)(month)(day)_(24 hour) 

因此命令爲當前日期做到這一點:

date +'20%y%m%d_%H' 

我想要做的是從指定的日期打印每個日期像這樣(使用for循環或其他)。例如:

20120205_16 -> 20120305_18 would be: 

20120205_16 
20120205_17 
20120205_18 
... 
20120305_17 
20120305_18 

很明顯,這裏的兩個硬位是指定日期並按小時遞增。

使用日期或其他方法可以輕鬆完成此操作嗎?

+0

啊,我只注意到你正在使用'20%y'。我相信你只是想用'%Y'這個給你整年的時間。 – 2012-07-20 07:19:04

回答

3

首先,你得使用%s格式time_t值:

start=$(date --date '5 feb 2012 16:00' +%s) 
stop=$(date --date '5 mar 2012 18:00' +%s) 

這些都是以秒錶示。您可以使用對他們的價值觀環,以1小時(3600秒)提高他們:

for t in $(seq ${start} 3600 ${stop}) 
do 
    date --date @${t} +'%Y%m%d_%H' 
done 

注意它是用來表示通過%+s在​​參數獲得次@

1

我已經寫了一組命令行工具,用於一般日期處理(dateutils)。這絕對不是廣泛傳播,而是便攜式。

對於這樣的任務,dseq是你的朋友,你的榜樣歸結爲:

dseq '2012-02-05 16:00:00' 1h '2012-03-05 18:00:00' -f '%Y%m%d_%H' 
=> 
20120205_16 
20120205_17 
20120205_18 
    ... 
20120305_16 
20120305_17 
20120305_18 
1

這也可以在Gawk的很好做:

gawk -v start="2011 10 10 10 00 00" \ 
    -v end="2011 11 10 10 00 00" ' 

BEGIN { 
    time = mktime(start) 
    end = mktime(end) 
    while (time <= end) { 
    print strftime("%Y%m%d_%H", time) 
    time +=3600 
    } 
}'