并行执行在 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
我有一个包含路径列表的文件。例如:
/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