我有一個 fasta 文件,我想用新的擴充 ID 取代 seq 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=Female] [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