如何以批处理模式运行程序来处理大数据?

如何以批处理模式运行程序来处理大数据?

处理大数据分析相当新鲜。我主要处理 DNA 和 RNA_seq 数据。

在一个目录中,我有 10,000 个文件(5000 - OG******.paml 和 5000 - OG******.treefile),它们以前缀 OG****** 开头,后跟数字(前- OG0017769)

ID 是唯一的。

每个 id 有两个文件 -

  1. OG*****.paml
  2. OG*****.treefile

使用这两个输入文件,我想运行一个名为 codeml (PAML 包)的程序pamlgithub

通过在配置文件(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

定义一个函数或编写一个只接受一个参数的脚本,例如.pamlcodeml文件或其名称中的独特数字,并通过构造一个包装调用.ctl根据参数文件,不改变模板代码ml.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

相关内容