разница между временами в файле - PullRequest
3 голосов
/ 04 мая 2011

У меня есть файл в этом формате

02:20:25
02:21:00
02:22:54
02:23:28 
02:29:30 
....

Мне нужно вычислить разницу во времени между двумя последовательными строками.Есть ли способ сделать это в shell-скриптах / awk?

Ответы [ 2 ]

5 голосов
/ 04 мая 2011

Упрощенным способом будет преобразование каждой строки в секунды, а затем вычитание предыдущей строки из текущей строки.Легко в awk.Если это действительно то, что вы хотите, то здесь есть возможность:

awk -f: '{\
  seconds = $1*60*60 + $2*60 + $3; \
  print seconds-prev_seconds; \
  prev_seconds=seconds;\
}' file.dat

Это оставляет первое отличие глупым, но это легко исправить, если по умолчанию установить то же значение.Он также не преобразует разницу в часы, минуты, секунды, но я не знаю, нужно ли вам это.

Но чтобы исправить первую строку, просто скажите

awk -f: '{\
  seconds = $1*60*60 + $2*60 + $3; \
  if (prev_seconds == 0) prev_seconds = seconds; \
  print seconds-prev_seconds; \
  prev_seconds=seconds;\
}' file.dat

Теперь первое отличие равно 0, что все еще странно, но не так плохо.

2 голосов
/ 04 мая 2011

Вот вкладыш awk 1 для получения разницы во времени между двумя строками для ввода, как указано выше:

awk 'BEGIN{prevDt=0;} {gsub(/:/, " ", $1); dt=mktime("2011 01 01 " $1); print "Diff: " (dt-prevDt); prevDt=dt;}' 

ВЫХОД (для входного файла, как указано выше)

Diff: 1293866425
Diff: 35
Diff: 114
Diff: 34
Diff: 362
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...