HOME > アプリケーション一覧 > バイオインフォマティクス > 大規模入力ファイルの処理

大規模入力ファイルの処理

大規模な入力ファイルを処理する場合、入力ファイルを分割しPBSのアレイジョブの機能を使ってジョブをPCクラスターで同時並列実行するのが効率的です。

例)
  • サイズが大きい(もしくは多数の)FASTAファイルに対するBLAST検索
  • サイズが大きい(もしくは多数の)FASTQファイルに対する BOWTIE2計算

入力ファイルの分割

  • 指定した行数でファイルを分割 (FASTQファイル等)
    $ wc  –l  (入力ファイル)            # 入力ファイルの全行数をカウント
    $ split –l (分割行数) -d  -a 4 (入力ファイル) (出力ファイル名)
    
    * -d -a 4 … 出力ファイル名に4ケタ数字の連番を付加

  • FASTAファイルの分割
    $ fasta_split  (入力FASTAファイル)  (分割数)
    
注意: 分割数は10,000以内に収まるようにして下さい(PBSのアレイジョブの制限)。

分割された入力ファイルに対するジョブの作成

seqコマンドで連番を出力し、xargsコマンドとechoコマンドを組み合わせて連番が付いたジョブを作成します。

$ seq -w 0 99 | xargs -i echo "blastp –db xxx -query test{}.fa -num_threads 1 1>test{}.out 2>test{}.err" > com.txt

$ cat  com.txt
blastp -db xxx -query test00.fa -num_threads 1 1>test00.out 2>test00.err
blastp -db xxx -query test01.fa -num_threads 1 1>test01.out 2>test01.err
...
blastp -db xxx -query test98.fa -num_threads 1 1>test98.out 2>test98.err
blastp -db xxx -query test99.fa -num_threads 1 1>test99.out 2>test99.err

多数の入力ファイルに対するジョブの作成

予め入力ファイルが多数ある場合は、findコマンドで入力ファイルを列挙し、xargsコマンドとechoコマンドを組み合わせて各入力ファイルに対するジョブを作成します。

例) 多数の gb*.seq に対して command を実行

$ find gb*.seq | xargs -i echo "command {} 1>{}.out 2>{}.err“> com.txt

$ cat  com.txt
...
command gbvrt7.seq 1>gbvrt7.seq.out 2>gbvrt7.seq.err 
command gbvrt8.seq 1>gbvrt8.seq.out 2>gbvrt8.seq.err 
command gbvrt9.seq 1>gbvrt9.seq.out 2>gbvrt9.seq.err 
$ find gb*.seq -exec basename {} .seq \; | xargs -i echo "command {}.seq 1>{}.out 2>{}.err" > com.txt

$ cat  com.txt
... 
command gbvrt7.seq 1>gbvrt7.out 2>gbvrt7.err 
command gbvrt8.seq 1>gbvrt8.out 2>gbvrt8.err 
command gbvrt9.seq 1>gbvrt9.out 2>gbvrt9.err

ファイルに書かれた多数のジョブの実行

PBSのアレイジョブを使い易くした qsubarraypbs コマンドを使えば、ファイルに書かれた多数のジョブをお手軽に(かつ効率的に)実行できます。

関連ページ