我有一个收集 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:39
awk
时间函数你可以使用它来做这件事)。
话虽如此,格式化日期时间不同之处因为日期时间有点值得怀疑。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