Shell 将同一文件传递给多个并行unix命令,这些命令都运行不同的Perl脚本

Shell 将同一文件传递给多个并行unix命令,这些命令都运行不同的Perl脚本,shell,unix,parallel-processing,Shell,Unix,Parallel Processing,我同时运行几个不同的perl脚本。它们都使用相同的文本文件作为输入(textfile.txt)。有没有一种方法可以让我只写一次文件名而不是写几次 $ perl myscript1.pl textfile.txt & perl myscript2.pl textfile.txt & perl myscript3.pl textfile.txt & perl myscript4.pl textfile.txt & perl myscript5.pl textfil

我同时运行几个不同的perl脚本。它们都使用相同的文本文件作为输入(
textfile.txt
)。有没有一种方法可以让我只写一次文件名而不是写几次

$ perl myscript1.pl textfile.txt & perl myscript2.pl textfile.txt & 
perl myscript3.pl textfile.txt & perl myscript4.pl textfile.txt & 
perl myscript5.pl textfile.txt & perl myscript6.pl textfile.txt & 
perl myscript7.pl textfile.txt & perl myscript8.pl textfile.txt

解决方案
您可以通过以下方式并行传递多个文件和多个脚本:

parallel perl ::: myscript*.pl ::: textfile*.txt

未经测试的。。。与GNU并行

parallel perl {} textfile.txt ::: myscript*.pl
如果您想知道它会做什么,请先使用
并行运行--干运行…
,但不实际执行任何操作


请注意,如果您有4个CPU内核,它将并行启动4个作业,然后在每次作业完成时启动一个新的作业,这与同时运行所有作业有细微的不同。如果您有32个作业,但只有4个内核,并且所有32个都应该同时运行,那么请使用
parallel-j32…
例如。

再编写一个脚本,调用所有其他脚本?这是一种多么巧妙的并行使用方式。这正是我想要的;简单、巧妙的一行。然而,我还有两个问题:
1。
如果我有50个CPU内核和100个作业,但只想一次运行32个作业,parallel-J32能帮我实现吗<代码>2。如果我有更多的文本文件,并且我希望所有的文本文件都被传递到我的所有perl脚本中,我会在上面的代码中做什么更改?这实际上非常合适——因为GNU Parallel本身就是一个perl脚本。1) 对。2)
parallel perl{}p1 p2 p3 p4 p5 p6:::script*.pl
不幸的是,这对我不起作用。它使用
所有的
文本文件生成每个perl脚本的所有组合(例如,第一个生成的是
perl script1.pl p1.txt p2.txt p3.txt p4.txt p5.txt p6.txt
)与
:::
一起工作!但是我还必须用文本文件交换脚本的位置,因此:
并行--干运行perl::script*.pl::text1.txt text2.txt text3.txt text4.txt
。这有意义吗?
parallel perl {} textfile.txt ::: myscript*.pl