#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