現在私のファイル構造は
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メールが送信されます。BarDate
Foo Sign
BarDate
したがって、電子メールがトリガーされ、、、2015-12-16
...に送信されます。2015-12-24
2015-12-25
しかし、適切ではありません2014-12-16
、、2016-12-24
2015-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-31
LINE変数に行が含まれている場合は、次のように日付を抽出できます。
MY_TIME=$(echo $LINE | cut -d: -f2)