2014-11-25 120 views
1

我每天都從數據庫生成報告,該報告基本上是使用DB2導出的數據提取。Shell腳本:生成報告版本

我使用的文件格式爲Report_DDMMYYY.csv

現在的問題是,我需要在每次在同一天跑時間的版本號添加到報告。

對於EG-Report_24112014_001.csv || Report_24112014_002.csv

所以每一天的腳本運行的版本不斷更新。

任何想法如何,我可以使用Shell腳本實現這一目標?

+0

我通常只使用時,分,秒。他們排序正確,沒有任何猜測。正如下面的解決方案所表明的那樣,年,月,日比您擁有的日,月,年有優勢。合併,日期+%Y%m%d%H%M%S M是分鐘,而m是月份。 – pedz 2014-11-26 13:31:45

回答

1

使用2個變量。第一個變量將存儲最後的執行日期,下一個將存儲版本。無論何時執行腳本,首先檢查日期是否相同。如果是,則增加版本,否則將版本設置爲1.導出變量以保留其值。

if [ "`date +'%Y%m%d'`" == "$LAST_EXEC_DATE" ]; then 
    ((VERSION += 1)) 
else 
    VERSION=1 
    LAST_EXEC_DATE=`date +"%Y%m%d"` 

fi 
export LAST_EXEC_DATE 
export VERSION 
+0

你不想出口$ VERSION嗎?這與出口3. – pedz 2014-11-26 13:30:09

+0

同樣,%Y%m%d我認爲是你想要的。 – pedz 2014-11-26 13:34:44

+0

我的不好,現在糾正 – hashbrown 2014-11-26 16:59:21

1

這是一個簡單的自包含函數,帶有一個循環。

newfile() { 
    # "local" is not POSIX, is it? 
    local date 
    local i 
    local filename 
    date=$(date +%Y%m%d) 
    for ((i=1; i<=999; ++i)) 
     filename=$(printf 'Report_%s_%03i.csv' "$date" "$i") 
     test -e "$filename" && continue 
     echo "$filename" 
     return 0 
    done 
    return 1 
} 

該循環使用Bash語法,但除此之外,它應該是合理的便攜式。

我用YYYYMMDD日期格式,因爲我有一些評論是機器可讀的,可排序的文件格式,在大多數情況下的路要走同意。

+0

該解決方案比我的解決方案更好。優雅而有用,最好的部分是它不依賴於像我的解決方案那樣將變量存儲在變量中。 +1。 – hashbrown 2014-11-27 03:40:19