我应该如何在bash环境中减去两个不同的时间

lac*_*991 1 math bash time

我目前正在处理一个处理和组合几个不同文件的脚本,对于这一部分,我必须找到两个不同时间之间的差异,以确定某人工作的"总"时间.时间本身采用以下格式

 34:18:00,40:26:00,06:08:00
Run Code Online (Sandbox Code Playgroud)

第一个是开始时间,第二个结束时间,第三个总时间.虽然这个显示正确,但有些条目需要进行双重检查和纠正(根据开始/结束时间总时间不正确).我在其他帖子中找到了几个不同的解决方案,但其中大多数还包括日期等等(大多数都使用awk),我对awk没有经验,所以我不确定如何从这些示例中删除日期部分.我也听说过我可以将时间转换为unix纪元时间,但我很好奇是否还有其他方法可以实现这一点,谢谢!

gni*_*urf 7

这样的事情可能对你有所帮助:

#!/bin/bash

time2seconds() {
   a=( ${1//:/ } )
   echo $((${a[0]}*3600+${a[1]}*60+${a[2]}))
}
seconds2time() {
   printf "%.2d:%.2d:%.2d" $(($1/3600)) $((($1/60)%60)) $(($1%60))
}

IFS=, read start stop difference <<< "34:18:00,40:26:00,06:08:00"

printf "Start=%s\n" "$start"
printf "Stop=%s\n" "$stop"
printf "Difference=%s (given in file: %s)\n" $(seconds2time $(($(time2seconds $stop)-$(time2seconds $start)))) "$difference"
Run Code Online (Sandbox Code Playgroud)

输出是:

Start=34:18:00
Stop=40:26:00
Difference=06:08:00 (given in file: 06:08:00)
Run Code Online (Sandbox Code Playgroud)

注意:没有什么可以检查时间是否有效格式,我不知道您的数据有多可靠.