使用Bash脚本以特定方式命名文件

时间:2014-08-08 16:03:07

标签: bash

我正在为多个种子值运行遗传算法,并且对于每次运行,我想将种子值放在输出文件的名称中。我已经能够使用以下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

虽然与我想要的输出文件名的微小差别并不妨碍我的进一步分析,但我仍然想知道。

2 个答案:

答案 0 :(得分:1)

答案 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