加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash中添加两个时间输出

发布时间:2020-12-15 21:14:57 所属栏目:安全 来源:网络整理
导读:我想用bash计算几个命令所花费的平均时间. time命令的输出是min:sec.milisec. 我不知道如何在bash中添加这种输出,最后计算平均值. 我试图用日期转换输出,但输出是“日期:无效日期`0:01.00’”. 解决方法 这是一个三部分答案 第一部分 首先,使用TIMEFORMAT
我想用bash计算几个命令所花费的平均时间. time命令的输出是min:sec.milisec.

我不知道如何在bash中添加这种输出,最后计算平均值.

我试图用日期转换输出,但输出是“日期:无效日期`0:01.00’”.

解决方法

这是一个三部分答案

第一部分

首先,使用TIMEFORMAT变量仅输出经过的秒数.然后你可以直接添加它

来自man bash

TIMEFORMAT
The value of this parameter is used as a format string specifying how the timing information
for pipelines prefixed with the time reserved word should be displayed. The % character
introduces an escape sequence that is expanded to a time value or other information. The
escape sequences and their meanings are as follows; the braces denote optional portions.

这是一个仅输出精度为0的秒的例子,即没有小数点.阅读第三部分为什么这很重要.

TIMEFORMAT='%0R'; time sleep 1
1

第二部分

第二,我们如何捕捉时间的输出?这实际上有点棘手,这里是你如何通过上面的命令捕获时间

TIMEFORMAT='%0R'; time1=$( { time sleep 1; } 2>&1 )

第三部分

我们如何将时间加在一起并获得平均值?

在bash中,我们使用$(())构造来进行数学运算.请注意,bash本身不支持浮点,因此您将进行整数除法(因此精度为0.)这是一个脚本,它将从两个命令中捕获时间并输出每个时间及其平均值

#!/bin/bash

TIMEFORMAT='%0R'
time1=$( { time sleep 1; } 2>&1 )
time2=$( { time sleep 4; } 2>&1 )
ave=$(( (time1 + time2) / 2))

echo "time1 is $time1 | time2 is $time2 | average is $ave"

产量

time1 is 1 | time2 is 4 | average is 2

如果整数除法对你来说是非启动的并且你想要精度,只要你不介意调用外部二进制bc,你就可以很容易地做到这一点.

#!/bin/bash

TIMEFORMAT='%3R'
time1=$( { time sleep 1; } 2>&1 )
time2=$( { time sleep 4; } 2>&1 )
ave=$( bc <<<"scale=3; ($time1 + $time2)/2" )

echo "time1 is $time1 | time2 is $time2 | average is $ave"

产量

time1 is 1.003 | time2 is 4.003 | average is 2.503

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读