У меня есть файл, который собирается, метки времени HH:MM должны добавить один час к 1-му столбцу и преобразовать оба столбца от 24-го до 12-го, затем вычитают их.
Вывод в файле я собрал времена из:
Start End Total Run Time
00:00 05:39
01:31 06:02
00:48 06:24
23:46 04:50
00:05 05:12
00:06 05:04
00:04 05:10
00:10 05:10
00:00 04:51
00:10 05:33
23:41 04:15
Я хочу дать общее время выполнения между этими двумя столбцами.
таким образом, 1-е метки времени должны быть 01:00 05:39
прежде, чем вычесть для обстрела общего времени 01:00-05:39
.
Я пытался просто этой командой вычесть, но 24-е к 12-му и добавляющему один час к 1-му столбцу за 1$, просто смущает меня.
awk 'BEGIN { OFS = "\t" } { $3 = $2 - $1 } 1'
Вы не можете просто вычесть объекты даты и времени как 01:00
и 05:39
в awk
(хотя GNU awk имеет свои собственные Функции Времени, которые Вы могли использовать, чтобы сделать это).
Однако при форматировании различия в дате и времени как, поскольку дата и время несколько сомнительна. Встроенный Miller's strptime
/strftime
реализации похожи, они обработают его - включая корректное переворачивание дневной границы.
Напр. данный
$ cat file
Start End
00:00 05:39
01:31 06:02
00:48 06:24
23:46 04:50
00:05 05:12
00:06 05:04
00:04 05:10
00:10 05:10
00:00 04:51
00:10 05:33
23:41 04:15
затем
$ mlr --pprint put -S '
${Total Run Time} = strftime(strptime(${End},"%H:%M") - 3600 - strptime(${Start},"%H:%M"),"%H:%M")
' file
Start End Total Run Time
00:00 05:39 04:39
01:31 06:02 03:31
00:48 06:24 04:36
23:46 04:50 04:04
00:05 05:12 04:07
00:06 05:04 03:58
00:04 05:10 04:06
00:10 05:10 04:00
00:00 04:51 03:51
00:10 05:33 04:23
23:41 04:15 03:34