多次运行的平均运行时间

时间:2011-11-21 16:58:17

标签: bash

我想在运行脚本后报告脚本的平均运行时间(使用time command计算),比如 n 次。是否有一个我不知道的简单bash命令,脚本或系统实用程序,这将允许我这样做?

3 个答案:

答案 0 :(得分:11)

这是一个有趣的问题so I took a few minute and wrote a script for it。下面是脚本的 light 版本,它接受一个输出运行time命令的文件。 The full script有更多选项,可直接接受命令直接运行平均值。

代码:

#!/bin/bash
# calculate the mean average of wall clock time from multiple /usr/bin/time results.

file=${1}
cnt=0

if [ ${#file} -lt 1 ]; then
    echo "you must specify a file containing output of /usr/bin/time results"
    exit 1
elif [ ${#file} -gt 1 ]; then
    samples=(`grep --color=never  real ${file} | awk '{print $2}' | cut -dm -f2 | cut -ds -f1`)

    for sample in `grep --color=never real ${file} | awk '{print $2}' | cut -dm -f2 | cut -ds -f1`; do
        cnt=$(echo ${cnt}+${sample} | bc -l)
    done

    # Calculate the 'Mean' average (sum / samples).
    mean_avg=$(echo ${cnt}/${#samples[@]} | bc -l)
    mean_avg=$(echo ${mean_avg} | cut -b1-6)

    printf "\tSamples:\t%s \n\tMean Avg:\t%s\n\n" ${#samples[@]} ${mean_avg}
fi 

示例(此处我将脚本timeit.sh命名为chmod 775 timeit.shchown jon timeit.sh *):

[ 09:22 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 3
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 1
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 2
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 2
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 7
[ 09:23 jon@hozbox.com ~ ]$ /usr/bin/time -a -o times.log -p sleep 0.5
[ 09:23 jon@hozbox.com ~ ]$ ./timeit.sh times.log
        Samples:        6
        Mean Avg:       2.5833

[ 09:23 jon@hozbox.com ~ ]$ cat times.log
real 3.00
user 0.00
sys 0.00
real 1.00
user 0.00
sys 0.00
real 2.00
user 0.00
sys 0.00
real 2.00
user 0.00
sys 0.00
real 7.00
user 0.00
sys 0.00
real 0.50
user 0.00
sys 0.00

这里不需要{p> * chown,但我无法帮助它! :)

man time

  

语法
  time [option...] command [arg...]

     

选项

     

-o FILE --output=FILE
   将资源使用统计信息写入FILE。

     

-a --append
   将资源使用信息附加代替输出文件     覆盖它。

     

-o FILE --output=FILE
   将资源使用统计信息写入FILE。默认情况下,这个    覆盖文件,销毁文件的先前内容。

     

-p --portability
   使用POSIX格式。

答案 1 :(得分:1)

我在这里问类似的事情:Average Execution Time。建议是使用Dumbbench,一个运行软件多次的Perl脚本并打印出一些统计信息。

答案 2 :(得分:0)

没有一个命令可以做到这一点。你可以做的是将每次运行的时间追加到一个文件中,然后根据这些数字计算平均值。