我需要计算时差
文件:
$ 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)
它只得到前两行之间的差异,我怎样才能让它也得到其余行之间的差异?
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 脚本组合这些行并为您执行。
归档时间: |
|
查看次数: |
489 次 |
最近记录: |