Как сравнить строки времени в скрипте Bash? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу сравнить две строки времени в скрипте bash. Например, 09:00:00 должно быть больше, чем 06:00:00. Я написал некоторый код, подобный следующему:

if [[ $1 > $time_higherbound ]]
    echo "$1 > $time_higherbound"
fi

Оказывается, этот подход не работает, и я могу получить несколько примеров, например:

09:00:01 > 09:00:00
09:00:01 > 10:00:00
09:00:01 > 24:00:00
09:00:01 > 17:00:00
09:00:01 > 24:00:00

Поскольку я не хочуСравнение включает в себя дату, я не могу использовать сравнение между отметкой времени. Кто-нибудь знает, как с этим бороться?

Ответы [ 3 ]

1 голос
/ 07 октября 2019

Сравнение строк, как вы уже делали, отлично подходит для этой цели, когда ваш формат строки даты выбран правильно.

Замечание:

fixed_time=09:00:01
compare_times=(
  09:00:00
  10:00:00
  24:00:00
  17:00:00
  24:00:00
)

for compare_time in "${compare_times[@]}"; do
  if [[ $compare_time = $fixed_time ]]; then
    echo "$compare_time = $fixed_time"
  elif [[ $compare_time < $fixed_time ]]; then
    echo "$compare_time < $fixed_time"
  elif [[ $compare_time > $fixed_time ]]; then
    echo "$compare_time > $fixed_time"
  fi
done

... правильно выводится как вывод :

09:00:00 < 09:00:01
10:00:00 > 09:00:01
24:00:00 > 09:00:01
17:00:00 > 09:00:01
24:00:00 > 09:00:01
0 голосов
/ 07 октября 2019

Вы можете преобразовать строку в дату для сравнения или использовать awk для сравнения:

kent$  cat f
09:00:01 > 09:00:00
09:00:01 > 10:00:00
09:00:01 > 24:00:00
09:00:01 > 17:00:00
09:00:01 > 24:00:00

kent$  awk -F ' > ' '{print $0 "  " ( $1>$2? "Yes":"No")}' f
09:00:01 > 09:00:00  Yes
09:00:01 > 10:00:00  No
09:00:01 > 24:00:00  No
09:00:01 > 17:00:00  No
09:00:01 > 24:00:00  No

Вы можете выполнить сравнение, проверив возвращаемое значение:

awk -v a="$t1" -v b="$t2" 'BEGIN{print ($1>=$2?"1":"0")}'
0 голосов
/ 07 октября 2019

Вам нужно будет преобразовать дату в секунды и сравнить ее.

date1="$(date -d "$1" +%s)"
date2"$(date -d "$time_higherbound" +%s)"

if [ $date1 -gt $date2 ]; then
    echo "$date1 > $date2"
fi

Вы также можете преобразовать обратно в типичный формат даты

echo $(echo `date -d @$date1`)
echo $(echo `date -d @$date2`)
...