Bash
如何提取日期併計算它是否在今天的“x”天內?
目前我的文件結構為
Foo Sign: blah SubFoo Sign: blah BarDate: 2017-11-31 Foo Sign: blah BarDate: Never Foo Sign: blah BarDate: 2016-12-20 Foo Sign: blah BarDate: 2014-12-20 .... and so on
這是駐留在文件中的主要四類數據。不要與
foo
,bar
,blah
事情一起去,那些並不重要。主要重要的是BarDate
和它的價值。主要部分
**案例1:**如果
BarDate
價值是Never
我什麼都不用做。**情況 2:**如果
BarDate
有一些值,而不是Never
它的格式為YYYY-MM-DD
.**要求:**如果在
BarDate
從今天起的 10 天內,它將郵寄給某人,並附上它的詳細資訊。所以,今天
15-12-2015
如果有任何BarDate
在 2015 年 12 月 15 日至 25 日之間的郵件,將發送帶有它的Foo Sign
,BarDate
.因此,將為
2015-12-16
,2015-12-24
,2015-12-25
…觸發一封郵件但不是為了
2014-12-16
,2016-12-24
,2015-12-26
到目前為止,我的 shell 腳本是
foo="" bardate="" outputfile="test.txt" result="" newline="\n" ### just a workaround step ### if [ -f $outputfile ]; then `rm $outputfile` fi ### filtering the date which doesn't have BarDate as Never, and writing it to a file ### `cat datafile | grep -e "Foo Sign" -e BarDate | grep -v "Never" | uniq >> $outputfile` IFS=$'\n' ### contains is a custom function which returns 1 if param1 is substring of param2 ### for line in ${cat outputfile}; do contains "$line" "Foo Sign" && foo="$line" ### constructing the result string ### ### -----> here I have to extract the date and see if it resides within 10 days span from today <----- ### ### then only the result string will be constructed ### contains "$line" "BarDate" && bardate="$line" && result=$result$newline$foo$newline$bardate$newline done ### mail the result ### echo -e "$result" | mailx -s "BLAH" someone@example.com
你可以得到目前的紀元時間
date "+%s"
您還可以將任何時間格式轉換為紀元時間:
date -d "${MY_TIME}" "+%s"
你可以減去這些時代。
在變數 LINE 中包含帶有的行
BarDate: 2017-11-31
,您可以使用以下方法提取日期:MY_TIME=$(echo $LINE | cut -d: -f2)