多次运行的平均运行时间

Ant*_*rre 4 bash

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

cho*_*own 11

这是一个有趣的问题,所以我花了几分钟为它编写了一个脚本.下面是脚本的简易版本,它接受一个具有运行time命令输出的文件. 完整脚本有更多选项,直接接受命令直接运行平均值.

码:

#!/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 
Run Code Online (Sandbox Code Playgroud)

例如(在这里我命名为剧本timeit.shchmod 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
Run Code Online (Sandbox Code Playgroud)

*chown这里不是必需的,但我无法帮助它!:)

man time:

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

选项

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

-a --append
资源使用信息附加到输出文件而不是覆盖它.

-o FILE --output=FILE
将资源使用统计信息写入FILE.默认情况下,这会 覆盖文件,从而破坏文件的先前内容.

-p --portability
使用POSIX格式.