fasta 헤더의 두 특정 문자 사이에 문자를 유지하고 나머지 문자를 제거합니다.

fasta 헤더의 두 특정 문자 사이에 문자를 유지하고 나머지 문자를 제거합니다.

fasta 헤더의 첫 번째 콜론과 두 번째 콜론 사이의 문자를 유지하려고 합니다. 내 코딩 기술은 매우 제한되어 있기 때문에 sed 및 awk를 사용하려는 시도는 실패했습니다.

존재하다:

>TRINITY_DN10034_c0_g1:TRINITY_DN10034_c0_g1_i1:g.1561:m.1561
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1:TRINITY_DN10322_c0_g1_i2:g.1424:m.1424
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

예상되는:

>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

도움이 필요하세요?

답변1

그리고 awk:

awk -F: '{ if (NF==1) { print } else { print ">"$2 } }' file

아니면 조금 압축해 보세요.

awk -F: '{ print (NF==1) ? $1 : ">"$2 }' file

:행에 필드가 하나만 있으면 필드 구분 기호를 사용하고 첫 번째 필드를 인쇄하고, >그렇지 않으면 두 번째 필드를 인쇄합니다.

그리고 sed:

sed 's/^>[^:]\+:\([^:]\+\).*/>\1/' file

답변2

표준 sed:

$ sed '/^>/{ s/[^:]*:/>/; s/:.*//; }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

이는 s/[^:]*:/>/a s/:.*//(fasta 헤더 라인)로 시작하는 모든 라인에 두 가지 대체를 모두 적용합니다.file.fa>

:첫 번째 교체는 첫 번째 문자를 포함하여 줄의 시작 부분을 교체합니다 >.

두 번째 교체는 :결과 데이터의 첫 번째 항목( 원래 행의 두 번째 항목)부터 행 끝까지 :모든 내용을 제거합니다.

:이렇게 하면 접두사가 붙은 두 번째 구분 필드가 남게 됩니다 >.


표준 awk:

$ awk -F ':' '/^>/ { $0 = ">" $2 } { print }' file.fa
>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

이는 필드 구분 기호로 사용되며 :다음으로 시작하는 줄이 나타나면 >전체 줄과 >두 번째 줄이 뒤따라 대체되어 :필드를 구분합니다. 수정 여부에 관계없이 모든 행이 인쇄됩니다.

답변3

제안된 솔루션:

GNU sed 사용

cut -f2 -d':' file | sed '1~2s/^/>/'

산출:

>TRINITY_DN10034_c0_g1_i1
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

답변4

이 PBM을 처리하는 방법에는 여러 가지가 있으며 그 중 일부는 다음과 같습니다.

$ cut -d: -f2 | sed -e '$!N;s/^/>/' file

$ awk -F: '/^>/{$0 = ">" $2}1' file

$ perl -F: -pale ' s/^>\K.*/$F[1]/' file

$ sed -e '
   /\n/{P;d;}
   /^>/y/:/\n/
   s/\n/&>/;//D
' file

결과

>TRINITY_DN10034_c0_g1_i1 
CCAGCGCCACGGAGGGCGAAGGCGAAGGCGGTGGTTTTGAACGATGAGGTGCCGCCGGTG
>TRINITY_DN10322_c0_g1_i2 
GATCCGCCTTCTATAACTGGAAAAGAAGAGGATGAGGTGCCGCCGATGAGTCTACCTTCT

관련 정보