GNU 并行交替作业

GNU 并行交替作业

我想运行一个任务,在其中指定两个命令,这两个命令将使用不同的参数以交替的方式运行。例如:

1. exec --foo $inputfile1 $inputfile.outfile1
2. exec --bar $inputfile2 $inputfile.outfile2
3. exec --foo $inputfile3 $inputfile.outfile3
4. exec --bar $inputfile4 $inputfile.outfile4

我可能可以通过指定两个并行命令或指定两个输入来逃脱,但我需要更通用的东西。将使用管道“查找”命令指定文件。

编辑:我的一项操作命令如下所示:

find . -name 'somefiles*' -print0 | parallel -0 -j10 --verbose 'exec --foo {} {.}.outfile' 

我只是不知道如何在两个命令之间以交替方式执行此操作

因此,基本上我需要并行 -j10 做的是在一组文件上运行 5 个带有 foo 参数的命令和其中 5 个带有 bar 参数的命令。我可能可以摆脱它不交替的情况,但我希望并行处理它恰好是 5/5 分割,这样我就不会以更多的 foos 或更多的 bar 结束

答案1

您可以先将所有参数放在一个文件中,然后使用

parallel -a filename command

例如:

echo "--fullscreen $(find /tmp -name *MAY*.pdf) $(find /tmp -name *MAY*.pdf).out" >> /tmp/a 
echo "--page-label=3 $(find /tmp -name *MAY*.pdf) $(find /tmp -name *JUNE*.pdf).out" >> /tmp/a 
echo "--fullscreen $(find /tmp -name *MAY*.pdf) $(find /tmp -name *JULY*.pdf).out" >> /tmp/a 

然后运行命令:

parallel -a /tmp/a evince

答案2

exec --foo $inputfile1 $inputfile.outfile1 & \
exec --bar $inputfile2 $inputfile.outfile2 & \
exec --foo $inputfile3 $inputfile.outfile3 & \
exec --bar $inputfile4 $inputfile.outfile4 &

答案3

这应该在--foo和之间交替--bar

find . -name 'somefiles*' -print0 |
  parallel -0 -j10 --verbose 'exec {= $_=seq() % 2 ? "--foo" : "--bar" =} {} {.}.outfile' 

相关内容