计算 bash 中的时间(h:m:s 或 m:s)差异
Calculate time (h:m:s or m:s) difference in bash
我想在脚本中显示命令的持续时间。根据持续时间,我想要这样的东西:12 minutes 04 seconds
或 01 hours 15 minutes 02 seconds
。始终带有前导零。
我尝试了我发现的不同方法 here,但没有得到结果。
顺便说一句:这是我在 bash 中的第一次尝试。
#!/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 用于获取以秒为单位的时差并格式化
1作为UTC标志
作为第三个参数传递
strftime("%H hour %M minutes %S seconds",date2-date1,1)
您可以使用 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", , , )
else printf("%02d minutes %02d seconds\n", , )
}'
)
这里我们使用 /usr/bin/time
及其 -f
选项。然后我们将 stderr 的输出通过管道传输到 awk
,在 :
处拆分字符串。 (时间写入 stderr,因此我们需要 2>
将 stderr 重定向到 >( awk ... )
过滤器。
awk 过滤器决定 NF
它使用的 printf
语句中字段的数量。
我想在脚本中显示命令的持续时间。根据持续时间,我想要这样的东西:12 minutes 04 seconds
或 01 hours 15 minutes 02 seconds
。始终带有前导零。
我尝试了我发现的不同方法 here,但没有得到结果。
顺便说一句:这是我在 bash 中的第一次尝试。
#!/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 用于获取以秒为单位的时差并格式化 1作为UTC标志
作为第三个参数传递strftime("%H hour %M minutes %S seconds",date2-date1,1)
您可以使用 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", , , )
else printf("%02d minutes %02d seconds\n", , )
}'
)
这里我们使用 /usr/bin/time
及其 -f
选项。然后我们将 stderr 的输出通过管道传输到 awk
,在 :
处拆分字符串。 (时间写入 stderr,因此我们需要 2>
将 stderr 重定向到 >( awk ... )
过滤器。
awk 过滤器决定 NF
它使用的 printf
语句中字段的数量。