Упрощенным способом будет преобразование каждой строки в секунды, а затем вычитание предыдущей строки из текущей строки.Легко в 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, что все еще странно, но не так плохо.