ビッグデータ分析を扱うことは非常に新しいことです。私は主にDNAとRNA_seqデータを扱っています。
ディレクトリには10,000個のファイル(5000 - OG ******.pamlと5000 - OG ******.treefile)があり、接頭辞OG ******で始まり、後に数字が続きます。(OG0017769より前)。
IDは一意です。
各IDには2つのファイルがあります。
- OG*****.paml
- 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
複数のアイテムを一度にバッチ処理するには、そのアイテムを使用して収集し、ls
次grep
の場所に挿入しますxargs
。
ls | grep 'OG[0-9]*.paml' | xargs -l1 mycodeml
または並列化:
ls | grep 'OG[0-9]*.paml' | parallel mycodeml