Как извлечь дату и рассчитать, находится ли она в течение «х» дней с сегодняшнего дня?

В настоящее время у меня есть файл со структурой как

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 .

Требование: если BarDate находится в пределах 10 дней с сегодняшнего дня, он отправит кому-то сообщение с его подробностями.

Итак, сегодня 15-12-2015 если есть какой-либо BarDate который находится в пределах BarDate декабря 2015 года, будет отправлено письмо с его Foo Sign , BarDate .

Таким образом, почта будет 2015-12-16 для 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" someone@example.com 

Вы можете получить текущую эпоху с помощью

 date "+%s" 

Вы также можете конвертировать любой формат времени в эпоху:

 date -d "${MY_TIME}" "+%s" 

И эти эпохи вы можете вычесть.

Имея строку с BarDate: 2017-11-31 в переменной LINE, вы можете извлечь дату, используя:

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