计算bash中的时间差(h:m:s或m:s)

时间:2016-06-04 14:58:24

标签: bash time diff

我想在脚本中显示命令的持续时间。延迟我想要的持续时间:12 minutes 04 seconds01 hours 15 minutes 02 seconds。始终保持领先零。

我尝试了here找到的不同内容,但没有得到结果。

顺便说一下:这是我第一次尝试打击。

2 个答案:

答案 0 :(得分:1)

#!/bin/bash
DATE1=$(date +%s)  
# ... your commands 
DATE2=$(date +%s)
DIFF=$(awk -vdate1=$DATE1 -vdate2=$DATE2 'BEGIN{print strftime("%H hour %M minutes %S seconds",date2-date1,1)}')
echo $DIFF

时间转换为秒并存储在变量DATE1和DATE2中  前提条件DATE2> DATE1

DATE1=$(date +%s)  
# ... your commands 
DATE2=$(date +%s)

strftime 用于以秒为单位获取time-diff并进行格式化 1作为UTC标志

作为第3个参数传递
strftime("%H hour %M minutes %S seconds",date2-date1,1)

答案 1 :(得分:0)

你可以使用time可执行文件(不是内置的bash,因为外部程序具有格式选项-f,并将时间作为[hours:]minutes:seconds提供,我现在心情不大等一个小时来了解内置程序如何向我们显示小时:))和awk这样(使用示例sleep 2):

/usr/bin/time -f "%E" sleep 2 2> >( 
   awk -F : ' 
    { if(FN>2) printf("%02d hours %02d minutes %02d seconds\n", $1, $2, $3)
      else printf("%02d minutes %02d seconds\n", $1, $2) 
    }' 
)

我们在这里使用/usr/bin/time及其-f选项。然后我们将stderr的输出管道传输到awk,将字符串拆分为:。 (时间写入stderr,因此我们需要2>将stderr重定向到>( awk ... )过滤器。

awk过滤器决定NF所使用的printf语句中的字段数。