Bash 脚本到 运行 C++ 二进制 N 次并将平均值输出到文件
Bash script to run C++ binary N times and output average to file
我有一个已编译的 C++ 程序,名为 code.cpp
。
输出的二进制文件为./code
.
代码输出几行文本,最后一行代表以秒为单位的挂墙时间。所以,例如:
<some_text>
<more_text>
...
<still_more_text>
0.0009072
对于任何给定的 运行 时间标志集,我想创建一个简单的 Bash 脚本到 运行 ./code
10 次请求的标志,并且然后将一行打印到文本文件。该文件的名称应与 ./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=
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"
我有一个已编译的 C++ 程序,名为 code.cpp
。
输出的二进制文件为./code
.
代码输出几行文本,最后一行代表以秒为单位的挂墙时间。所以,例如:
<some_text>
<more_text>
...
<still_more_text>
0.0009072
对于任何给定的 运行 时间标志集,我想创建一个简单的 Bash 脚本到 运行 ./code
10 次请求的标志,并且然后将一行打印到文本文件。该文件的名称应与 ./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=
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"