目前我的文件结构为
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" [email protected]
答案1
您可以通过以下方式获取当前纪元时间
date "+%s"
您还可以将任何时间格式转换为纪元时间:
date -d "${MY_TIME}" "+%s"
你可以减去这些纪元。
将行包含BarDate: 2017-11-31
在变量 LINE 中,您可以使用以下方法提取日期:
MY_TIME=$(echo $LINE | cut -d: -f2)