计算时间差

Moh*_*med 3 bash

我需要计算时差

文件:

$ cat time.log
06:12:23
06:12:54
06:14:18
06:15:38
$
Run Code Online (Sandbox Code Playgroud)

我期望结果如下:

0:00:31
0:01:20
Run Code Online (Sandbox Code Playgroud)

我试过这个

#!/bin/sh
cat "$@" |
tr : ' ' |
  dc -e '
[60+Lm1-Sm]SS
[60+Lh1-Sh]SM
[24+]SH
?SsSmSh
?SsSmSh
LsLs- d0>S Ss
LmLm- d0>M Sm
LhLh- d0>H Sh
[
]Ls[:]Lm[:]Lh
nnnnnn
'
Run Code Online (Sandbox Code Playgroud)

但结果如下

$ ./calculate_time.sh time.log 
0:0:31
$ 
Run Code Online (Sandbox Code Playgroud)

它只得到前两行之间的差异,我怎样才能让它也得到其余行之间的差异?

Phi*_*pos 5

date为什么不使用像转换为可以计算的东西这样的工具呢?

如果您不介意 GNUsed e标志的安全含义,您可以这样做

sed 'N;s/\(.*\)\n\(.*\)/date -d @$(($(date -d \2 +%s) - $(date -d \1 +%s))) -u +%H:%M:%S/e' time.log
Run Code Online (Sandbox Code Playgroud)

因此,您可以date -d 6:12:43 +%s将时间戳转换为秒,计算差异并按 转换回来date -d 80 -u +%H:%M:%S。sed 脚本组合这些行并为您执行。