我有一个包含 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
。