簡體   English   中英

bash shell腳本:從starttime創建一個endtime

[英]bash shell scripting: create an endtime from a starttime

我正在將一些數據從一種文件格式調解到另一種文件格式,並使用bash來執行調解步驟。 部分過程涉及從文件名中取一個時間戳來創建一個開始時間,然后再添加5分鍾來創建結束時間。 文件名以YYYYmmddHHMMSS格式給我一個日期。 我可以輕松地為每個開始時間添加500以獲得適用於所有開始date --date=除了超過55小時,但這顯然不正確所以我試圖使用date --date= code來添加5 date --date= ,如下所示:

date --date='$starttime +5 minutes' '+%Y%m%d%H%M%S'

例如:

date --date='20140220125500 +5 minutes' '+%Y%m%d%H%M%S'

但是我每次都會收到這樣的錯誤:

日期:無效日期`20140220125500 +5分鍾'

任何人都可以在我的日期聲明中建議我需要更改的內容,或者是否有類似的替代語法?

這對我有用:

$ date --date='20140220 12:55:00 CET +5 minutes' '+%Y%m%d%H%M%S'
20140220130000

也就是說,問題是YYYYYMMDDHHMMSS單獨在date是不可理解的。 相反,請使用YYYYYMMDD HH:MM:SS格式。

當您收到有關YYYYYMMDDHHMMSS格式的數據時,您可以使用sed解析它,如下所示:

$ file="YYYYmmddHHMMSS"
$ new_name=$(sed -e 's/^\(.\{8\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1 \2:\3:\4/' <<< "$file")
$ echo "$new_name"
YYYYmmdd HH:MM:SS

所以在你的情況下:

$ file="20140220125500"
$ new_name=$(sed -e 's/^\(.\{8\}\)\(.\{2\}\)\(.\{2\}\)\(.\{2\}\)/\1 \2:\3:\4/' <<< "$file")
$ echo "$new_name"
20140220 12:55:00
$ date --date="$new_name CET + 5 minutes"
Thu Feb 20 13:00:00 CET 2014

注意我用過

$ date --date="$new_name CET +5 minutes" '+%Y%m%d%H%M%S'
              ^                        ^
              note the double quotes to have the var expanded

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM