主要部分

主要部分

目前我的文件结构为

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

这是文件中驻留的主要四类数据。不要去关注那些foobar那些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-242015-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)

相关内容