как преобразовать время от 24-го до 12-го, затем вычитают эти два раза

У меня есть файл, который собирается, метки времени 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'
0
задан 24 November 2019 в 15:10

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
1
ответ дан 21 December 2019 в 23:51

Другие вопросы по тегам:

Похожие вопросы: