我正在尝试为我的程序制作一个 shell 脚本,使其多次花费时间,然后除法以获得执行的平均时间。
我尝试如下:
time [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 | grep real | awk '{print $2}'
基本上我想删除程序的输出,所以我试图将输出重定向到 null。我还想删除时间的输出。它几乎不起作用,我还需要将结果保存在变量中,以便我可以循环运行它。任何想法如何做到这一点?
注意:"时间"可以是内置的外壳。调用为/usr/bin/time 或使用 env 以避免内置并获得正确的管道和输出行为:
env time bash -c './finder >/dev/null' 2>&1 | awk '$2 == "real" {print $1}'
此外,将 1 定向到 null,然后立即将 2 定向到同一位置是不好的。
您可以用反引号括起来并分配给变量,或者为了更简单的标点符号重定向到临时文件,然后使用:
ELAPSED=`cat time.txt`
下面是 awk 正在解析的一些示例输出:
$ env time pwd
/tmp
0.01 real 0.00 user 0.00 sys
如果您更喜欢 POSIX 输出,可以通过-p
开关:
$ env time -p pwd
/tmp
real 0.01
user 0.00
sys 0.00
以下是在变量中获取原始时间 stderr 输出的一种方法:
$ TIME=`env time pwd 2>&1 | tail -1`
$ echo $TIME
0.00 real 0.00 user 0.00 sys
通过"中间"临时文件和格式-f
选项:
real_time_val=$(/usr/bin/time -f "%e" -o tmpfile [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 && cat tmpfile)
%e
- 进程使用的实际(挂钟)时间,以秒为单位。-o FILE
- 将资源使用统计信息写入FILE
而不是标准错误流
示例结果:
$ echo "$real_time_val"
0.02