modelfasta.fasta
다음과 같은 fasta 파일이 있습니다( ).
>seq1
AAAAAAAAAAAAAAA
GGGGGGGGGGG
>seq2
TTTTTTTTTTTTTTT
CCCCCCC
나는 다음과 같은 결과를 기대하고 있습니다 :
>header>seq1
AAAAAAAAAAAAAAAGGGGGGGGGGG
>header>seq2
TTTTTTTTTTTTTTTCCCCCCC
fasta 샘플 파일(modelfasta.fasta)과 함께 sed 및 awk 명령을 사용해 보았지만 이런 방식으로 출력을 얻었습니다.
awk '{printf $0""}' modelfasta.fasta
>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC
또한 제목 뒤의 개행 문자를 제거하고 시퀀스를 제목과 병합합니다.
sed를 사용하여 동일한 결과를 찾았습니다.
sed ':a;N;$!ba;s/\n//g' modelfasta.fasta
>seq1AAAAAAAAAAAAAAAGGGGGGGGGGG>seq2TTTTTTTTTTTTTTTCCCCCCC
헤더를 제외한 모든 새 줄을 제거하고 싶습니다. 도와주세요.
답변1
fasta 헤더 문자로 시작하지 않는 줄에서 모든 줄 바꿈을 제거하려고 합니다 >
.
awk '/^[>;]/ { if (seq) { print seq }; seq=""; print } /^[^>;]/ { seq = seq $0 } END { print seq }' data.fa
awk 스크립트는 다음과 같습니다.
/^[>;]/ { if (seq) { print seq }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print seq }
...파일에서 찾은 내용에 따라 세 가지 다른 작업을 수행합니다.
- fasta 헤더 라인( 로 시작하는 라인
>
) 또는 fasta 주석 라인( 로 시작하는 라인;
): 우리가 기억하는 시퀀스seq
(있는 경우)를 인쇄합니다(이전 헤더에 속함). 기억된 순서를 지웁니다. 현재 줄(제목 또는 설명)을 인쇄합니다. - fasta 제목 없음(및 주석 없음) 줄: 기억된 시퀀스를 해당 줄의 시퀀스와 연결합니다. 이렇게 하면 개행 문자가 효과적으로 제거됩니다.
- 파일 끝: 인쇄 순서. 이는 파일의 마지막 헤더와 연관된 시퀀스입니다.
시퀀스를 예쁘게 인쇄하려면 예를 들어 한 줄에 60자로 제한하세요.
#!/usr/bin/awk -f
function pretty(s) {
p = "";
n = 1;
while (n < length(s)) {
p = (p ? p "\n" : "") substr(s, n, 60);
n += 60;
}
return p;
}
/^[>;]/ { if (seq) { print pretty(seq) }; seq=""; print }
/^[^>;]/ { seq = seq $0 }
END { print pretty(seq) }
그것을 넣고 prettyfasta.awk
실행 가능하게 만든 chmod +x prettyfasta.awk
다음( ) 실행하십시오.
$ ./prettyfasta.awk data.fa