저는 bash 스크립팅 초보자입니다. 누구든지 도와주실 수 있나요?
- 디렉토리( )에 파일 목록( )
pamlfiles/
이 있습니다 .*.fa
OG0018053.fa OG0018054.fa OG0018055.fa
- 파일은 다음과 같습니다.
head -n 2 ../pamlfiles/* ==> ../pamlfiles/OG0018053.fa <== >C.rhe ATGAGG------------GTCCTCCTGCTTCTCGGATTGGTGGCTTTTGGCCTGGCTGAC ==> ../pamlfiles/OG0018054.fa <== >L.fab atg---------------------acggacgagatatctctggcgtgtggcatgtcagga ==> ../pamlfiles/OG0018055.fa <== >A.ven ATGAACACTGCCACTCCCACCGAGTTTGACTTCTCTTTCTTGGAAGAGGGCTTCTCCGCC
- 다음 스크립트( )를 사용하여 처리합니다
forloop.sh
.#!/bin/bash for file in ../pamlfiles/*.fa do filename=$(basename -- "$file") gene_name="${filename%%.*}" cp codeml_0_opt1_templ.ctl codeml_0.ctl sed -i -e "s/GENE/$gene_name/g" codeml_0.ctl codeml codeml_0.ctl done
그러나 실행하면 forloop.sh
오류가 발생합니다.
Sequence file ../pamlfiles/OG0018055 not found!
다음과 같습니다 codem1_0_opt1_templ.ctl
.
head codeml_0_opt1_templ.ctl
seqfile = ../pamlfiles/GENE
outfile = results/GENE_M0.txt
treefile = OG0018055.fa.m.fa.mt.py.nex.treefile
noisy = 9
verbose = 0
runmode = 0
seqtype = 1
CodonFreq = 2
내가 어디서 잘못됐나요?
답변1
codem1
프로세스의 출력 (그게 무엇이든)을 보면 파일을 찾을 수 없다는 내용이 표시됩니다 OG0018055
. 이는 파일이 실제로 호출되므로 논리적일 뿐입니다.OG0018055.fa
스크립트에서 .fa
파일 이름 줄의 확장자를 제거 할 수 있습니다.
gene_name="${filename%%.*}"
유전자 이름을 알아보세요. 그런 다음 sed
파일 템플릿의 모든 패턴 발생을 해당 유전자 이름으로 바꿀 수 있습니다 . GENE
그러나 이는 업데이트된 codeml_0.ctl
파일에서 해당 seqfile
행이 다음과 같다는 것을 의미합니다.
seqfile = ../pamlfiles/OG0018055
따라서 .fa
여기에는 확장이 없습니다.
따라서 템플릿 파일을 수정하여 읽으십시오.
seqfile = ../pamlfiles/GENE.fa
이렇게 하면 .fa
파일 확장자가 손실되지 않습니다.