Нужно вычесть немедленную временную разницу строки в файле журнала в bash? - PullRequest
0 голосов
/ 26 октября 2019

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

 2019-10-26 08:06:56 6503  6501 Begin restore logical log 2290281 (Storage Manager copy ID: 1 1571839465).
 2019-10-26 08:14:05 6503  6501 Completed restore logical log 2290281.
 2019-10-26 08:14:09 6503  6501 Begin restore logical log 2290282 (Storage Manager copy ID: 1 1571839691).
 2019-10-26 08:21:09 6503  6501 Completed restore logical log 2290282.
 2019-10-26 08:21:13 6503  6501 Begin restore logical log 2290283 (Storage Manager copy ID: 1 1571839892).

, поэтому мое ожидание показывает просто результат ниже

deference between (2019-10-26 08:14:05) and  (2019-10-26 08:06:56) 
deference between (2019-10-26 08:21:09) and  (2019-10-26 08:14:09) 

, поэтому мой ожидаемый результат равен

7 minutes and 11 seconds
7 minutes and 00 seconds 

1 Ответ

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

Вы можете использовать bash / date для простой математики даты.

PREV=
DELTA=0
while read dt  tm data ; do
  CURR=$(date '+%s' -d "$dt $tm");
  [ "$PREV" ] && DELTA=$((CURR-PREV));
  PREV=$CURR ;
  echo "$DELTA sec $dt $tm $data" ;
done < logfile

В эхо можно добавить дополнительное форматирование

echo "$((DELTA/60)) min and $((DELTA%60)) sec $dt $tm $data" ;

Output:
0 min and 0 sec 2019-10-26 08:06:56 6503  6501 Begin restore logical log 2290281 (Storage Manager copy ID: 1 1571839465).
7 min and 9 sec 2019-10-26 08:14:05 6503  6501 Completed restore logical log 2290281.
0 min and 4 sec 2019-10-26 08:14:09 6503  6501 Begin restore logical log 2290282 (Storage Manager copy ID: 1 1571839691).
7 min and 0 sec 2019-10-26 08:21:09 6503  6501 Completed restore logical log 2290282.

...