我有一个目录,其中充满了子目录,每个子目录中有 74 个文件。我有 bash 脚本,它分析 74 个文件,并希望在所有目录上并行运行它。
当我进入每个子目录并手动运行 bash 脚本时,输出是完美的。
当尝试并行运行 bash 脚本时,bash 脚本似乎只在一个文件上运行。
这是我用来并行运行脚本的代码
parallel "cd {} && bash Final_Fantasy.sh" :::: dir.lst
奇怪的是我有另一个脚本在相同的文件上运行,使用与上面相同的代码,并导致 0 问题。
我尝试运行的脚本只是使用 awk 和 sed 以及一些 read while 循环进行一些简单的编写和覆盖。
我的并行代码有问题吗?或者我应该在哪里寻找问题?
谢谢!
编辑1:
1) Script1.sh:将 Final_Fantasy.sh 和单个输出文件 (Output1.txt) 复制到空目录中。
2) dir.lst 中找到的每个目录现在仅包含 2 个文件,Output1.txt 和 Final_Fantasy.sh
3) Final_Fantasy.sh 的第一行将 Output1.txt 切割成 74 个单独的文件。
4) Final_Fantasy 包含多行 awk、sed 和 grep,可在 read-while 循环内一次编辑 74 个文件之一。
5)对于某些步骤,我将输出写入 .txt 文件以供以后使用。
6) 循环的最后一步是将两个 .txt 文件放在cat
一起。
exit
我在文件末尾还有一个,因为我希望在出现任何问题时对循环进行故障排除。它看起来如下:
done < $filename2 done < $filename1 exit more code that works
此时我唯一能想到的是 1) HPC 超出了我的控制范围。 2)exit
表现得很有趣,并在循环的第一次迭代后退出,而不是在分析完所有文件后退出。
编辑2)我无法在我的本地机器上重现此问题,并行和所有,这让我相信这是一个奇怪的HPC问题,我不认为我有控制权。
编辑3)有没有办法可以parallel
逐步输出它正在执行的操作,以便我可以看到问题发生的位置?
答案1
parallel
直接执行它的参数。除非你使用 shell,否则你无法做 shell 的事情。放在sh -c
后面parallel
。
更新:以上仅适用于 moreutils 并行,而不适用于这个问题所涉及的 GNU 并行。