fasta 시퀀스에서 개행 문자를 제거하는 방법

fasta 시퀀스에서 개행 문자를 제거하는 방법

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

관련 정보