我试图从 Ubuntu终端执行的C程序文件(在Desktop
上)被命名为distribution.c
。
我目前正在使用:
<admin-name>@<admin-name>-Latitude-E4310:~/Desktop$ g++ -o test distribution.c
<admin-name>@<admin-name>-Latitude-E4310:./test d0=0.3 d1=0.7 >output.txt
这很适合将.c程序文件生成的输出写入名为output.txt
的.txt文件中。但是,我的目的是为d0
到0.0
范围内的每个1.0
值生成输出文件(以0.01
为步长)。一个约束是d1=1-d0
。输出文件应命名为ouputxyz.txt
,其中xyz
对应于d0
值中的三个数字。 (示例:output010.txt
时输出文件名为d0=0.10
)。是否可以从Ubuntu终端本身为此任务编写循环? (我不想为此在原始程序中添加另一个循环。)
顺便说一句,如果您需要有关我正在尝试做的任何其他详细信息,或者您认为该问题可以改进和/或更具体,请在评论中告知我。我很乐意详述。
答案 0 :(得分:1)
Bash不支持浮点运算-因此,您必须诉诸bc
之类的东西-如下例所示。
最简单的方法是将其放在Bash脚本中。 (您将需要安装bc
。)
for ((i=0; i<=100; i++))
do
x=`echo "scale=2; $i/100" | bc`
y=`echo "scale=2; 1-$x" | bc`
d0=`printf %.2f $x`
d1=`printf %.2f $y`
filename=`printf output%03d.txt $i`
./test d0=$d0 d1=$d1 >$filename
done
答案 1 :(得分:1)
这与上面的情况类似,但是增加的是另一个参数p
从0.00
到1.00
也以0.01
的步长变化。
for ((n=0; n<=100; n++))
do
x=`echo "scale=2; $n/100" | bc`
y=`echo "scale=2; 1-$x" | bc`
for ((i=0; i<=100; i++))
do
z=`echo "scale=2; $i/100" | bc`
d0=`printf %.2f $x`
d1=`printf %.2f $y`
p=`printf %.2f $z`
filename=`printf output%03d.txt $n`
./test L=1000 n=100 d0=$d0 d1=$d1 p=$p >>$filename
done
done