Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shell 在一秒钟内比较两个时间戳_Shell_Unix_Timestamp - Fatal编程技术网

Shell 在一秒钟内比较两个时间戳

Shell 在一秒钟内比较两个时间戳,shell,unix,timestamp,Shell,Unix,Timestamp,我正在编写一个shell脚本,它解析CSV文件并执行一些计算 时间戳的格式为:HH:MM:SSS.SSS,并存储在变量中:$t2和$t1 我想知道两枚邮票之间的差异(总是小于1秒),并在秒内报告为$t3(即:0.020) 但是上面的代码只是打印两个变量,中间有一个减号-如何比较这两个时间戳?这里有一个非常有趣的方法!去掉所有的秒数,得到毫秒数。做减法。如果结果为负数,那是因为秒数溢出,所以在1000毫秒后再加上。在前面插入一个小数点,以毫秒为单位表示秒 #!/bin/bash -xv t1="0

我正在编写一个shell脚本,它解析CSV文件并执行一些计算

时间戳的格式为:
HH:MM:SSS.SSS
,并存储在变量中:
$t2
$t1

我想知道两枚邮票之间的差异(总是小于1秒),并在秒内报告为
$t3
(即:
0.020


但是上面的代码只是打印两个变量,中间有一个减号-如何比较这两个时间戳?

这里有一个非常有趣的方法!去掉所有的秒数,得到毫秒数。做减法。如果结果为负数,那是因为秒数溢出,所以在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
#/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=$(回声“标度=3;t3/1000”| bc)
echo$t3

在将两个时间戳转换为毫秒值后,您可以使用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

这几乎成功了,我出现了以下错误:
/parser.sh:081:value对base来说太大了(错误标记为“081”)
-有什么想法吗?尝试使用“bash-xv./parser.sh”运行脚本以打开调试。复制脚本并重试。请重试,我似乎在第3行和第4行的翻译中丢失了斜杠。好的,它将“061”和“081”中的前导零解释为八进制。我在“t3=”开始的行中,在每个数字的前面加了一个“10”,这样它就知道数字是十进制的。请再试一次,对不起,我第一次错了!我不得不再编辑一次-对不起!浮点除法需要在倒数第二行的“bc”中进行,否则小数点可能在八进制问题后的错误位置。我要回去睡觉了——我今天过得不好!
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