Сначала вам нужно преобразовать даты в формат unix time _t (т.е. секунды с "эпохи", 1970 -01 -01 00 :00 :00 ). Затем вы можете вычислить разницу с помощью простого вычитания.
Имеющиеся у вас даты не распознаются программой date
в их текущем формате. Он ожидает что-то похожее больше на дату с дефисами и двоеточиями, разделяющими поля, чем на число.
Вот пример, который использует sed
в функции для «фиксации» дат -, т.е. конвертирует их в формат, понятный date
, а затем использует date
для преобразования во время _t секунд, затем выполните вычитание:
#!/bin/bash
a=20170804020000
b=20170804015959
function fixdate() {
printf "$1" | sed -E -e 's/(....)(..)(..)(..)(..)(..)/\1-\2-\3 \4:\5:\6/'
}
a_seconds="$(date -d "$(fixdate "$a")" '+%s')"
b_seconds="$(date -d "$(fixdate "$b")" '+%s')"
seconds=$((a_seconds - b_seconds))
echo "$seconds"
Использование sed:
sed -E 's/^[[:digit:]]+:[[:space:]]+//' file