Bash脚本运行C++二进制文件N次,并将平均值输出到文件



我编译了一个C++程序,名为code.cpp

输出的二进制文件为./code

该代码输出几行文本,最后一行表示墙的时间(以秒为单位(。例如:

<some_text>
<more_text>
...
<still_more_text>
0.0009072

对于任何给定的运行时标志集,我想创建一个简单的Bash脚本,用请求的标志运行./code10次,然后将单行打印到文本文件中。该文件的名称应该与./code的名称完全相同,例如:

./code -g 12 -v 4 -m -t

将生成一个名为./code -g 12 -v 4 -m -t.txt的文本文件,其中包含一行表示十次运行的平均值。

以下是我使用Bash和bc:获得的工作解决方案

#!/bin/bash
sum=0.0
c_command=$1
suffix=".txt"
f_name="${c_command} ${suffix}"
for n in {1..10};
do 
output=$($c_command)
read -ra arr -d '' <<<"$output" 
value=${arr[-1]}
sum=$(bc <<< "scale=10; $sum+$value")
done
avg=$(bc <<< "scale=10; $sum/10")
echo $avg > "${c_command}.txt"

调用二进制文件时,将运行时参数作为脚本的参数:

./script.sh "./code -g 12 -v 4 -m -t"

最新更新