对多个文件运行相同的脚本,脚本需要 2 个输入文件

对多个文件运行相同的脚本,脚本需要 2 个输入文件

我有一个包含 500 个基因型文件的文件夹,如下所示:

xaa.txt
xab.txt
xac.txt
xad.txt

我想在同一个文件中分别为每个基因型文件运行一个脚本;我知道这个问题之前已经得到解答,但是,我的脚本需要“2”输入文件格式(第一个文件是我的基因型文件,有 500 个文件,第二个文件是单个个体群体文件。我的脚本还需要输出文件每个基因型.文件。

对于我很容易使用的单个基因型文件

perl ./my_script.pl  my_geno_file.tab.table  good_individuals.txt  results.out.tab.table

其中 my_geno_file.tab.table 是第一个文件(我现在有 500 个 geno_files),good_individuals.txt 是第二个输入文件,results.out.tab.table 是第三个输入文件,应该为空..你能帮我吗如何同时对所有 500 个文件运行此脚本?

答案1

你可以去xargs。首先,通过标准输入上的管道向其提供文件,然后将参数与可执行文件一起使用,同时通过设置要使用的最大进程数来控制并行性。

printf "%s\0" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3

-0表明xargs输入是 NUL 分隔的。

-I@定义替换符号。实际上,@管道 ( ) 右侧的第二个|被文件名替换。然后它再次出现以@file_3表明您可以@在同一命令中再次使用。这里产生输出文件名。

-P500代表最多同时运行 500 个进程。

最后,printf "%s\0" _the_right_dir_/*列出用 NUL 分隔的目录文件。然后xargs将它们一一取出并用作 的参数./my_script.pl

相关内容