运行程序以避免覆盖输出



我有一个程序有 1000 个输入,但我无法控制输出

我可以在每个文件上运行该程序,如下所示。所以这个程序会获取输入文件,就像input1,input2和input3一样,然后运行我的程序并在那里保存几个输出,但每次都会覆盖输出到以前的输出

for i in {1..3}; do
myprogram input"$i" 
done

我以为我生成了 3 个文件夹并将输入文件放在那里,然后我运行程序,所以也许程序在那里写入输出,但仍然不成功。

for i in {1..3}; do
myprogram "$i"/input"$i" 
done

基本上我想执行将输出保存在每个文件中的程序,然后转到另一个文件夹。

有没有办法应对这个问题?

谢谢

如果它覆盖了注释中指示的输入文件,则可以通过复制和重命名/移动然后调用程序来保存原始输入文件。 然后,如果您确实希望它们位于子目录中,请创建一个目录,并移动输入和/或输出文件。

for i in {1..3}
do
cp infile$i outfile$i
./myprogram outfile$i
mkdir programRun-$i 
mv infile$i outfile$i programRun-$i
done

如果它不保留输入文件,而只是输出到一致的文件名,那么类似

for i in {1..3}
do
./myprogram infile$i
mkdir programRun-$i 
mv outfile programRun-$i/outfile-$i
done

请注意,无论哪种情况,我都会考虑使用与$i不同的变量来识别程序的运行 - 可能是YYYMMDDHHMMSS形式的时间/日期,或者只是一个unix时间戳。 仅用于组织目的,这样给定运行的所有输出文件都在一起......但无论什么都适合您的需求。

如果 myprogram 总是创建相同的文件名,那么您可以在执行下一次循环迭代之前将它们移开。 在此示例中,如果输出是标注 out*.txt 的文件

for i in {1..3}; do ./myprogram input"$i"; mkdir output"$i"; mv out*.txt output"$i"/; done

如果创建的文件名不同,则可以在执行应用程序之前创建新目录并 cd 到这些目录中。

for i in {1..3}; do mkdir output"$i"; cd output"$i"; ../myprogram ../input"$i"; cd ..; done

最新更新