Быть несправедливость произведенным?

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

Мой сценарий:

cd /data/version1/logs/log_Job_7702260850557985265/

{
TDS="$(grep 'Logfile started' manoj.log |  awk '{print $3,$4}' | cut -d: -f2-)"
echo "$TDS"
TDE="$(grep 'Process removed' manoj.log | awk '{print $1,$2}')"
echo "$TDE"
convert_date(){ printf '%s-%s-%s %s' ${1:6:4} ${1:3:2} ${1:0:2} ${1:11:8}; }

# Convert to timestamp
TDS_TS=$(date -d "$(convert_date "$TDS")" +%s)
echo "$TDS_TS"
TDE_TS=$(date -d "$(convert_date "$TDE")" +%s)
echo "$TDE_TS"
# Subtract
TD=$((TDE_TS-TDS_TS))
echo "$TD"
# convert to HH:MM:SS (note, that if it's more than one day, it will be wrong!)
TotalDuration=$(date -d "@$TD" +%H:%M:%S)
echo "$TotalDuration"
}

Ниже вывод всех переменных:

TDS = 21.07.2019 05:04:50
TDE = 21.07.2019 05:27:52
TDS_TS = 1563678290
TDE_TS = 1563679672
TD = 1382
TotalDuration = 01:23:02

Если Вы первые 2 переменные TDS, TDE, это - те, которые извлечены из .log файла (у меня есть verfied их вручную и они корректны). На основе тех значений TotalDuration должен быть равен 0:23:02, но сценарий дает TotalDuration как 1:23:02.

Может кто-то помогать мне определить свою ошибку и вести меня для решения проблемы для получения надлежащих результатов.

0
задан 8 August 2019 в 03:25

1 ответ

Добавьте эти -u флаг к Вашей команде даты для получения корректного вывода. Обратите внимание, что это должно быть 0:23:02, а не 00:22:62.

TotalDuration=$(date -ud "@$TD" +%H:%M:%S)

-u печать время в UTC.

0
ответ дан 23 October 2019 в 06:45

Другие вопросы по тегам:

Похожие вопросы: