我正在编写一个解析CSV文件并执行一些计算的shell脚本。
时间戳采用以下格式:HH:MM:SSS.sss
并存储在变量中:$t2
和$t1
。
我想知道这两个邮票之间的区别(它总是不到一秒),并以秒为单位报告$t3
(即:0.020
)
t3=$t2-$t1
但上面的代码只是打印两个变量之间的减号 - 如何比较两个时间戳?
答案 0 :(得分:1)
这是一种时髦的方式!剥掉所有的秒数以获得毫秒。做减法。如果结果为负,那是因为秒数溢出,所以加回1000ms。在前面插入一个小数点,以毫秒为单位。
#!/bin/bash -xv
t1="00:00:02.001"
t2="00:00:03.081"
ms1=${t1/*\./}
ms2=${t2/*\./}
t3=$((10#$ms2-10#$ms1))
[[ $t3 < 0 ]] && t3=$((t3+1000))
t3=$(echo "scale=3; $t3/1000"|bc)
echo $t3
答案 1 :(得分:0)
在将两个时间戳转换为毫秒值后,您可以使用awk数学计算2个时间戳中的差异:
t1=04:13:32.234
t2=04:13:32.258
awk -F '[ :.]+' '{
t1=($1*60*60 + $2*60 + $3)*1000 + $4
t2=($5*60*60 + $6*60 + $7)*1000 + $8
print (t2-t1)/60}' <<< "$t1 $t2"
0.4
用于转化的公式:
timestamp value (ms) = (hour * 60 * 60 + minute * 60 + second ) * 1000 + milli-second