次の500個の遺伝子型ファイルを含むフォルダがあります。
xaa.txt
xab.txt
xac.txt
xad.txt
同じファイルから各遺伝子型ファイルのスクリプトを別々に実行したいと思います。この質問に対する回答は、以前にすでに回答されていることがわかっています。しかし、私のスクリプトには「2」入力ファイル形式が必要です。最初のファイルは私の遺伝子型ファイルで、500個のファイルがあります。 2番目のファイルは単一の個々の母集団ファイルです。また、私のスクリプトは各遺伝子型のファイルを出力する必要があります。
単一の遺伝子型ファイルの場合は簡単に使用できます。
perl ./my_script.pl my_geno_file.tab.table good_individuals.txt results.out.tab.table
my_geno_file.tab.tableが最初のファイル(現在500個のgeno_fileがある場合)は、good_individuals.txtは2番目の入力ファイルであり、results.out.tab.tableは3番目の入力ファイルです。空でなければなりません。助けてもらえますか? 500ファイルすべてに対してこのスクリプトを同時に実行するには?
答え1
あなたは行くことができますxargs
。まず、標準入力のパイプを介してファイルを供給し、使用するプロセスの最大数を設定して並列性を制御しながら、実行可能ファイルに引数を使用します。
printf "%s\0" _the_right_dir_/* | xargs -0 -I@ -P500 ./my_script.pl @ file_2 @file_3
-0
xargs
入力がNULで区切られていることを示します。
-I@
代替記号を定義します。実際、@
パイプ()の右側の2番目の項目は|
ファイル名に置き換えられます。その後、同じコマンドで再利用@file_3
できることを示すために再表示されます。@
これにより、出力ファイル名が生成されます。
-P500
同時に実行される最大500のプロセスを表します。
最後に、printf "%s\0" _the_right_dir_/*
NULで区切られたディレクトリファイルを一覧表示します。次に、xargs
1つずつ取り出し、パラメータとして使用します./my_script.pl
。