Как манипулировать вводом даты в bash? - PullRequest
0 голосов
/ 18 апреля 2020

Мне нужно создать скрипт, который вычисляет разницу в днях между двумя датами. Два входа даты должны быть в формате ДД / ММ / ГГГГ, но в настоящее время bash продолжает принимать входные данные в формате ММ / ДД / ГГГГ. Это, очевидно, делает неправильные вычисления, но я не уверен, как настроить два входа для использования. Есть ли какая-нибудь команда, которая может просто переключать категории DD и MM (что-то, что поменяет местами 1 и 2, когда они разделены прямым sla sh) только для двух входных дат?

Вот мой сценарий, чтобы помочь в любом совете вы могли бы дать мне.

date1=$1
date2=$2
diff1=$(date -d $date1 +%s)
diff2=$(date -d $date2 +%s)
diff="$(($diff2-$diff1))"
days="$(($diff/86400))"
if [ "$days" -lt "0" ]; then
   days="$(($days*-1))"
fi
echo $days

Например:

brandon@brandon:~$ ./between 01/04/2020 01/07/2020
3

Когда это должно быть 91.

Спасибо

1 Ответ

0 голосов
/ 18 апреля 2020

С помощью awk вы можете сделать

awk -F"/" '{print $2"/"$1"/"$3}'

-F для разделителя полей, учитывая строку в формате X / Y / Z, приведенная выше строка будет печатать Y / X / Z

Это будет ваш сценарий

#!/usr/bin/env bash

date1=$(echo "$1" | awk -F"/" '{print $2"/"$1"/"$3}')
date2=$(echo "$2" | awk -F"/" '{print $2"/"$1"/"$3}')

diff1=$(date -d $date1 +%s)
diff2=$(date -d $date2 +%s)

diff="$(($diff2-$diff1))"
days="$(($diff/86400))"

if [ "$days" -lt "0" ]; then
   days="$(($days*-1))"
fi

echo $days

exit 0
...