我每天都從數據庫生成報告,該報告基本上是使用DB2導出的數據提取。Shell腳本:生成報告版本
我使用的文件格式爲Report_DDMMYYY.csv
現在的問題是,我需要在每次在同一天跑時間的版本號添加到報告。
對於EG-Report_24112014_001.csv || Report_24112014_002.csv
所以每一天的腳本運行的版本不斷更新。
任何想法如何,我可以使用Shell腳本實現這一目標?
我每天都從數據庫生成報告,該報告基本上是使用DB2導出的數據提取。Shell腳本:生成報告版本
我使用的文件格式爲Report_DDMMYYY.csv
現在的問題是,我需要在每次在同一天跑時間的版本號添加到報告。
對於EG-Report_24112014_001.csv || Report_24112014_002.csv
所以每一天的腳本運行的版本不斷更新。
任何想法如何,我可以使用Shell腳本實現這一目標?
使用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
這是一個簡單的自包含函數,帶有一個循環。
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日期格式,因爲我有一些評論是機器可讀的,可排序的文件格式,在大多數情況下的路要走同意。
該解決方案比我的解決方案更好。優雅而有用,最好的部分是它不依賴於像我的解決方案那樣將變量存儲在變量中。 +1。 – hashbrown 2014-11-27 03:40:19
我通常只使用時,分,秒。他們排序正確,沒有任何猜測。正如下面的解決方案所表明的那樣,年,月,日比您擁有的日,月,年有優勢。合併,日期+%Y%m%d%H%M%S M是分鐘,而m是月份。 – pedz 2014-11-26 13:31:45