我有一个简单的C程序,它根据输入的文件来分析测量所需的时间。它打印出stdout句子所用的时间。有没有办法让bash脚本多次运行带有特定输入的程序,并从每次迭代(从stdout)中抽出时间,所以我可以在所有迭代中平均那段时间?
所以我会像这样运行原始的C程序:
./ test file1 file2 out.out
运行后,它会打印出来 "经过的时间是xx.xx秒"到stdout。
特别是,我如何在相同的输入文件上编写一个可以运行测试100次的shell脚本,并且只计算所有运行所用的时间?
谢谢,抱歉没有澄清
答案 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
,因为它将为整个管道计时。
您可以根据需要处理分钟和秒数,以获得总经过时间,平均时间等。