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

时间:2018-01-26 22:14:27

标签: 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 textfile.txt & perl myscript6.pl textfile.txt & 
perl myscript7.pl textfile.txt & perl myscript8.pl textfile.txt


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

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

2 个答案:

答案 0 :(得分:3)

未经测试... GNU Parallel

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

首先使用parallel --dry-run ...运行,如果您想查看它会做什么,但实际上没有做任何事情。

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

答案 1 :(得分:0)

run_all_perl() (
    perl_scripts=(
      myscript1.pl  myscript2.pl  myscript3.pl  myscript4.pl
      myscript5.pl  myscript6.pl  myscript7.pl  myscript8.pl
    )
    for script in "${perl_scripts[@]}"; do
        perl "$script" "$1" &
    done
    wait
)

run_all_perl textfile.txt