我想创建一个简单的bash脚本,它将运行我的一个可执行文件超过100次

时间:2015-02-08 20:01:03

标签: bash shell unix

我有一个简单的C程序,它根据输入的文件来分析测量所需的时间。它打印出stdout句子所用的时间。有没有办法让bash脚本多次运行带有特定输入的程序,并从每次迭代(从stdout)中抽出时间,所以我可以在所有迭代中平均那段时间?

所以我会像这样运行原始的C程序:

./ test file1 file2 out.out

运行后,它会打印出来 "经过的时间是xx.xx秒"到stdout。

特别是,我如何在相同的输入文件上编写一个可以运行测试100次的shell脚本,并且只计算所有运行所用的时间?

谢谢,抱歉没有澄清

2 个答案:

答案 0 :(得分:1)

喜欢这样:

#!/bin/bash
start=$SECONDS
for i in {0..99}; do
   ./program file1 file2
done
end=$SECONDS
echo "scale=2;($end-$start)/100"|bc

我只是使用$SECONDS(无论如何bash为你计算),无需运行awk即可找到总的已用时间。然后在最后,我让bc计算浮点平均时间(以秒为单位)到2位小数(scale=2)。

答案 1 :(得分:0)

尝试

for i in {0..99};
    /usr/bin/time test file1 file2 out.out 2>&1 >/dev/null | awk '
         {split($3, ct, "[:a-zA-Z]"); summ += ct[1]; sums += ct[2]}
     END {print summ/100.0, sums/100.0}
    '
done

重定向的顺序很重要;你希望当stdout变为null时,stderr(time命令的输出)被传送到awk。如果您没有任何标准输出,则可以删除>/dev/null。您无法使用内置的bash time,因为它将为整个管道计时。

您可以根据需要处理分钟和秒数,以获得总经过时间,平均时间等。