【发布时间】:2014-01-03 16:20:39
【问题描述】:
我正在编写一个解析 CSV 文件并执行一些计算的 shell 脚本。
时间戳的格式为:HH:MM:SSS.sss,并存储在变量中:$t2 和 $t1。
我想知道这两个戳记之间的区别(总是小于一秒)并以秒为单位将其报告为$t3(即:0.020)
t3=$t2-$t1
但是上面的代码只是打印了两个变量之间有一个减号 - 我如何比较两个时间戳?
【问题讨论】:
我正在编写一个解析 CSV 文件并执行一些计算的 shell 脚本。
时间戳的格式为:HH:MM:SSS.sss,并存储在变量中:$t2 和 $t1。
我想知道这两个戳记之间的区别(总是小于一秒)并以秒为单位将其报告为$t3(即:0.020)
t3=$t2-$t1
但是上面的代码只是打印了两个变量之间有一个减号 - 我如何比较两个时间戳?
【问题讨论】:
这是一个时髦的方法!剥离所有整秒以获得毫秒。做减法。如果结果变为负数,那是因为秒数溢出,所以在 1000 毫秒内加回来。在前面插入一个小数点,以毫秒为单位。
#!/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
【讨论】:
./parser.sh: 081: value too great for base (error token is "081") - 有什么想法吗?
在将两个时间戳转换为它们的毫秒值后,您可以使用 awk 数学计算两个时间戳的差异:
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
【讨论】: