빅 데이터를 처리하기 위해 배치 모드에서 프로그램을 실행하는 방법은 무엇입니까?

빅 데이터를 처리하기 위해 배치 모드에서 프로그램을 실행하는 방법은 무엇입니까?

빅데이터 분석을 다루는 것은 아주 새로운 일입니다. 저는 주로 DNA와 RNA_seq 데이터를 다루고 있습니다.

디렉토리에는 10,000개의 파일(5000 - OG******.paml 및 5000 - OG******.treefile)이 있으며 접두사 OG******로 시작하고 뒤에 숫자가 옵니다.(OG0017769 이전).

아이디는 고유합니다.

각 ID마다 두 개의 파일이 있습니다.

  1. OG*****.paml
  2. OG*****.트리파일

이 두 입력 파일을 사용하여 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

함수를 정의하거나 하나의 인수만 취하는 스크립트를 작성하세요..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

관련 정보