我想在运行脚本后报告脚本的平均运行时间(使用time command计算),比如 n 次。是否有一个我不知道的简单bash
命令,脚本或系统实用程序,这将允许我这样做?
答案 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.sh
和chown 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
chown
,但我无法帮助它! :)
语法
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)
没有一个命令可以做到这一点。你可以做的是将每次运行的时间追加到一个文件中,然后根据这些数字计算平均值。