현재 내 파일 구조는
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
.
필요하다:오늘부터 10일 이내 라면 BarDate
해당 내용과 함께 다른 사람에게 우편으로 발송됩니다.
따라서 오늘 2015년 12월 15일부터 25일 사이에 발생한 이메일이 15-12-2015
있는 경우 가 포함된 이메일이 전송됩니다 .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)