ビッグデータを処理するためにバッチモードでプログラムを実行するには?

ビッグデータを処理するためにバッチモードでプログラムを実行するには?

ビッグデータ分析を扱うことは非常に新しいことです。私は主にDNAとRNA_seqデータを扱っています。

ディレクトリには10,000個のファイル(5000 - OG ******.pamlと5000 - OG ******.treefile)があり、接頭辞OG ******で始まり、後に数字が続きます。(OG0017769より前)

IDは一意です。

各IDには2つのファイルがあります。

  1. OG*****.paml
  2. OG*****.ツリーファイル

これら2つの入力ファイルを使用してcodeml(PAMLパッケージ)というプログラムを実行したいと思います。パームギットハブ

構成ファイル(excodeml.ctl)にすべての入出力ファイルを提供します。

head -n 4 codeml.ctl 
seqfile = OG0017769.paml  * sequence data filename
treefile = OG0017769.treefile  * tree structure file name
outfile = OG0017769_out.paml * main result file name

コマンドラインの使用 -

codeml codeml.ctl

結果ファイル -

# These are the output files generated from each default run # 
# default output #

2NG.dN
2NG.dS
2NG.t
4fold.nuc
lnf
rst
rst1
rub
OG0017769_out.paml

バッチモードで

# File 1 input #
OG0017769.paml
OG0017769.treefile

# file 1 expected output #

OG0017769.2NG.dN
OG0017769.2NG.dS
OG0017769.2NG.t
OG0017769.4fold.nuc
OG0017769.lnf
OG0017769.rst
OG0017769.rst1
OG0017769.rub
OG0017769_out.paml

# File 2 input #
OG0017771.paml
OG0017771.treefile

# file 2 expected output #

OG0017771.2NG.dN
OG0017771.2NG.dS
OG0017771.2NG.t
OG0017771.4fold.nuc
OG0017771.lnf
OG0017771.rst
OG0017771.rst1
OG0017771.rub
OG0017771_out.paml

codeml.ctl 構成ファイルで *.paml、*.treefile、および *out.paml を置き換えて、このプロセスを自動化する方法についていくつかの提案を提供してください。

ありがとう、

ベストアンサー1

関数を定義するか、1つの引数のみを取るスクリプトを作成します。.pamlcodemlファイルまたは名前に一意の番号があり、ラッパーを構成して呼び出されます。.ctlパラメータファイルによってはテンプレートが変更されません。codeml.ctl文書:

function mycodeml(){
  num="${1//[^0-9]/}" # keep only numbers
  if [ !-f OG$num.paml ] ;then
    echo ERR NOTFOUND $PWD/OG$num.paml >&2
  else
    tmp=$(mktemp /tmp/codeml_XXX.ctl)
    sed "s/OG[0-9]*\(.paml\|.treefile\|_out.paml\)/OG$num\1/g" codeml.ctl >$tmp &&
    codeml $tmp
    rm $tmp
  fi
}

だからあなたは実行することができますmycodeml OGxxx.paml

複数のアイテムを一度にバッチ処理するには、そのアイテムを使用して収集し、lsgrepの場所に挿入しますxargs

ls | grep 'OG[0-9]*.paml' | xargs -l1 mycodeml

または並列化:

ls | grep 'OG[0-9]*.paml' | parallel mycodeml

おすすめ記事