我正在为多个种子值运行遗传算法,并且对于每次运行,我想将种子值放在输出文件的名称中。我已经能够使用以下Bash脚本执行此操作。
1 #!/bin/bash
2 # Multi-seed script
3
4 seed=0.01
5 for count in {1..100..1}
6 do echo "$seed"
7 ./nsga2r $seed < input_data/truss.in
8 $(mv all_pop.out all_pop_seed"$count".out)
9 seed=$(echo "$seed+0.01" | bc)
10 done
脚本如果非常直截了当。第5行运行循环以获得100 seed
个值。第7行为程序nsga2r
运行当前种子值,从文件input_data/truss.in
获取输入值。第8行将当前种子值添加到当前seed
值的输出文件的名称中。这会产生输出:
all_pop_seed1.out
all_pop_seed2.out
all_pop_seed3.out
...
all_pop_seed10.out
all_pop_seed11.out
...
all_pop_seed99.out
all_pop_seed100.out
但我怎么命名他们呢?
all_pop_seed001.out
all_pop_seed002.out
all_pop_seed003.out
...
all_pop_seed010.out
all_pop_seed011.out
...
all_pop_seed099.out
all_pop_seed100.out
虽然与我想要的输出文件名的微小差别并不妨碍我的进一步分析,但我仍然想知道。
答案 0 :(得分:1)
请参阅How to zero pad a sequence of integers in bash so that all have the same width?
printf "%03d" 99
将产生099 例如
答案 1 :(得分:0)
使用printf
格式化文件名。此外,您不需要命令替换来执行mv
命令。
#!/bin/bash
# Multi-seed script
seed=0.01
for count in {1..100..1} ; do
echo "$seed"
./nsga2r $seed < input_data/truss.in
printf -v fname "all_pop_seed%03d.out" "$count"
mv all_pop.out "$fname"
seed=$(echo "$seed+0.01" | bc)
done