2017-10-14 76 views
0

我想为我的程序制作一个shell脚本多次花费时间,然后进行分割以获得执行的平均时间。Shell脚本从'时间'获得实时并保存到变量

我已经试过是以下几点:

time [./finder -p ARG1 ARG2 ARG3] > /dev/null 2>&1 | grep real | awk '{print $2}' 

基本上我想删除我的程序的输出,所以我想将输出重定向到空。我也想删除时间的输出。它几乎没有工作,我也需要将结果保存在一个变量中,以便我可以在循环中运行它。任何想法如何可以做到?

+1

'[./finder -p ARG1参数3]'容貌像Tcl;其余的看起来像标准的POSIX外壳。 – chepner

+0

[BashFAQ#32](http://mywiki.wooledge.org/BashFAQ/032):*我如何将'time'的输出重定向到一个变量或文件?* –

回答

0

注意:“时间”可以是一个shell内建的。调用如在/ usr/bin/time会或与ENV避免内置并得到适当的管道和输出行为:

env time bash -c './finder >/dev/null' 2>&1 | awk '$2 == "real" {print $1}' 

而且,那就要烂指导1至零,然后立即指示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 
+0

这不会为我打印任何内容。如何将0.000时间的结果保存在变量中? – Cows42

+1

你可以使用内建的'command'; 'env'不是必须的。 '命令时间bash -c'...''。 – chepner

0

通过 “中间” 临时文件和格式-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