У меня есть сценарий удара, где он войдет в папку и извлечет добавление метки времени путем соответствия строке ключа. И затем это преобразует дату и время, штампующую 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.
Может кто-то помогать мне определить свою ошибку и вести меня для решения проблемы для получения надлежащих результатов.
Добавьте эти -u
флаг к Вашей команде даты для получения корректного вывода. Обратите внимание, что это должно быть 0:23:02, а не 00:22:62.
TotalDuration=$(date -ud "@$TD" +%H:%M:%S)
-u
печать время в UTC.