![목록의 새 ID에 따라 fasta 파일의 seq ID를 바꿉니다.](https://linux55.com/image/191996/%EB%AA%A9%EB%A1%9D%EC%9D%98%20%EC%83%88%20ID%EC%97%90%20%EB%94%B0%EB%9D%BC%20fasta%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20seq%20ID%EB%A5%BC%20%EB%B0%94%EA%BF%89%EB%8B%88%EB%8B%A4..png)
fasta 파일이 있는데 seq ID(설명 줄)를 새 확장 ID로 바꾸고 싶습니다. fasta 파일의 형식은 다음과 같습니다.
>3C-assembly|contig_74
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_75
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>3C-assembly|contig_76
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
...................
다음 형식으로 새로운 fasta를 구현하려고 합니다.
>Scaffold_001 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_002 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
>Scaffold_003 [Sex=Female] [Unplaced scaffold]
TAATAAAAAATATTTTTTTAATTGACCCTAACCAAATCCTGAACCTAACCGTAACACTGA
....................
이는 예를 들어 3C-Assembly|contig_74가 Scaffold_001 [Sex=여성] [Unplacedscaffold]로 대체되어야 함을 의미합니다. 이를 위해 두 개의 IDS를 연결하는 두 개의 열(탭으로 구분)이 포함된 텍스트 파일을 만들었습니다.
3C-assembly|contig_74 Scaffold_001 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_75 Scaffold_002 [Sex=Female] [Unplaced scaffold]
3C-assembly|contig_76 Scaffold_003 [Sex=Female] [Unplaced scaffold]
......................
이 텍스트 파일을 사용하여 fasta 파일의 ID를 바꾸는 방법을 알고 있습니다. 감사해요
답변1
사용 awk
:
awk -F'\t' '
NR==FNR{ a[$1]=$2; next }
/^>/{
id=a[substr($0, 2)]
if (id!=""){ print ">" id; next }
}
1
' textfile file.fasta
먼저 매핑이 포함된 텍스트 파일을 읽고 a
첫 번째 필드를 인덱스로 사용하여 두 번째 필드를 배열에 저장합니다. 녹음 으로 건너뛰세요 next
.
그런 다음 fasta 파일을 읽으십시오. 레코드가 로 시작하는 경우 현재 레코드( )에서 첫 번째 문자를 제거하고 해당 값을 배열 인덱스로 사용하여 >
배열에서 새 ID를 찾습니다 . id가 비어 있지 않으면 id를 인쇄하고 레코드로 이동합니다.substr($0, 2)
>
next
1
현재 레코드(시퀀스 또는 일치하지 않는 ID)를 인쇄합니다 .
답변2
awk -F'\t' '
NR==FNR { map[">"$1] = ">"$2; next }
$0 in map { $0 = map[$0] }
{ print }
' mapfile fastafile