Bash разбивает строку по строкам и проверяет, старше ли дата 1 дня

#bash #awk

#баш #авк

Вопрос:

У меня есть следующий вывод, сохраненный в переменной.

 Time created: Sun, 08 Nov 2020 17:57:52 GMT
 

Теперь я хотел бы разделить строку даты и проверить, старше ли дата 1 (день) / 24 (часов) / X (дней)

Вс, 08 ноября 2020 г. 17:57:52 GMT

Ниже вы можете найти мой скрипт:

 full_time_created="Time created: Sun, 08 Nov 2020 17:57:52 GMT"
IFS='Time created:' read -ra VALUES <<< "${full_time_created}"
short_date_create=$(echo ${VALUES[@]} | xargs)

echo ${VALUES[@]} # Return a broken string
Sun, 08 Nov 2020 17 57 52 GM
 

Как я могу сделать это в Bash?

Спасибо!

Ответ №1:

Использование date(1) арифметического расширения и оболочки, что-то вроде

 if (( $(date  "%s") - $(date --date="$(sed 's/^[^:]*: //' <<<"$full_time_created")"  "%s") > 24*60*60 )); then
    echo "Created time is older than one day."
fi
 

Ответ №2:

Вы можете использовать cut для получения строки даты, а затем использовать gnu date command для синтаксического анализа и перехода к предыдущему дню следующим образом:

 date -d "$(cut -d : -f2- <<< "$full_time_created") -1 day"
Sat Nov  7 12:57:52 EST 2020
 

А затем, чтобы получить значение ЭПОХИ:

 date -d "$(cut -d : -f2- <<< "$full_time_created") -1 day" ' %s'
1604771872
 

Вы можете получить значение ЭПОХИ предыдущей даты с сегодняшнего дня, используя:

 date -d '-1 day' ' %s'
1607167689