如何将时间从 24 小时转换为 12 小时,然后减去两个时间

如何将时间从 24 小时转换为 12 小时,然后减去两个时间

我有一个收集 HH:MM 时间戳的文件,需要在第一列添加一个小时,并将两列从 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

我想给出这两列之间的总运行时间。

因此,第一个时间戳应该01:00 05:39在减法之前以获得总运行时间01:00-05:39

我尝试仅使用此命令来减去 24H 到 12H 并将一个小时添加到 $1 第一列,这让我很困惑。

awk 'BEGIN { OFS = "\t" } { $3 = $2 - $1 } 1'

答案1

你不能简单地减去日期时间对象,如和01:00(尽管 GNU awk 有自己的05:39awk时间函数你可以使用它来做这件事)。

话虽如此,格式化日期时间不同之处因为日期时间有点值得怀疑。Miller 的内置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

相关内容