我有一个程序无法控制的输入
我可以在每个文件上运行程序,如下所示。因此,该程序将输入文件输入为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
基本上,我想执行将输出保存在每个文件中,然后转到另一个文件夹的程序。
反正有办法应对吗?
谢谢
答案 0 :(得分:0)
如果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
答案 1 :(得分:0)
如果它按照注释中的指示覆盖输入文件,则可以通过复制和重命名/移动然后调用程序来保存原始输入文件。然后,如果您确实希望将它们放在子目录中,请建立目录,然后移动输入和/或输出文件。
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时间戳。仅出于组织目的,这样既可以将给定运行中的所有输出文件放在一起,又可以满足您的需求。