빅데이터 분석을 다루는 것은 아주 새로운 일입니다. 저는 주로 DNA와 RNA_seq 데이터를 다루고 있습니다.
디렉토리에는 10,000개의 파일(5000 - OG******.paml 및 5000 - OG******.treefile)이 있으며 접두사 OG******로 시작하고 뒤에 숫자가 옵니다.(OG0017769 이전).
아이디는 고유합니다.
각 ID마다 두 개의 파일이 있습니다.
- OG*****.paml
- 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