주요 부분

주요 부분

현재 내 파일 구조는

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있는 경우 가 포함된 이메일이 전송됩니다 .BarDateFoo SignBarDate

따라서 이메일이 트리거되어 2015-12-16, 2015-12-24, 2015-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)

관련 정보