并行执行在 Linux 上接受多个输入的作业

Parallel execution of a job which takes multiple inputs on Linux

我有一个包含路径列表的文件。例如:

/run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/ /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/

我有一个程序(我们称它为 'prog'),它有 3 个参数、2 个输入文件名和 1 个输出文件名。正常执行:

prog ~/A.txt ~/B.txt ~/out.txt

我想使用基于文件每一行构造的参数并行执行我的程序,例如:

prog /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/A.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/B.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/CNMC_N_191/out.txt
prog /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/A.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/B.txt /run/user/1007/gvfs/smb-share:server=xeonator,share=c/Results/Normals/8_mo/204-196/out.txt

我一直在尝试并行使用 xargs 和 GNU,但我无法为这些工具构建合适的命令行。这是我的尝试:

cat ListPaths.txt | xargs -I '{}' -n 1 -P 8 ./SkullSegmenter/SkullSegmenter '{}'A.txt '{}'B.txt '{}'out.txt

但这并没有正确构造参数。有人可以帮我解决这个问题吗?

应该这样做:

cat ListPaths.txt | parallel ./SkullSegmenter/SkullSegmenter {}A.txt {}B.txt {}out.txt

使用 --dry-run 进行测试,看看这些是否是您想要的命令 运行:

cat ListPaths.txt | parallel --dry-run ./SkullSegmenter/SkullSegmenter {}A.txt {}B.txt {}out.txt