主な部分

主な部分

現在私のファイル構造は

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

これはファイル内のデータの主な4つのカテゴリです。そのようなことには注意を払わないでください。fooそのようなbarものはblah重要ではありません。最も重要なのはBarDateその価値です。

主な部分

ケース1:BarDate価値があるなら、Never私は何もする必要はありません。

ケース2:BarDate他の値がある場合、Neverその形式はですYYYY-MM-DD

必要:今日から10日以内なら、BarDateその内容とともに他人に郵便で発送されます。

したがって、2015年12月15日から25日の間に今日発生したEメールが15-12-2015ある場合を含むEメールが送信されます。BarDateFoo SignBarDate

したがって、電子メールがトリガーされ、、、2015-12-16...に送信されます。2015-12-242015-12-25

しかし、適切ではありません2014-12-16、、2016-12-242015-12-26

これまでのところ、私のシェルスクリプトは次のようになりました。

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-31LINE変数に行が含まれている場合は、次のように日付を抽出できます。

MY_TIME=$(echo $LINE | cut -d: -f2)

関連情報