如何使用 bash 在 fasta 文件中添加 ID_ 后跟数字

how to add a ID_ follow by number in a fasta file using bash

我有一个fasta文件

my_file.fasta

>NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

我只是想在每个序列名称(以 > 开头的行)的开头添加一个 ID_number,所以我尝试了:

awk '/^>/ {= ">ID_" ++i }1' my_file.fasta > Outfile.fasta

但我明白了

>ID_1>NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>ID_2>NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>ID_3>NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

我想得到类似的东西,但没有第二个>,我的意思是类似于 (>ID_Number space old_name):

>ID_1 NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>ID_2 NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>ID_3 NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

谢谢

对 OP 当前 awk 代码的几个小改动:

$ awk '/^>/{= ">ID_" ++i " " substr(,2)}1' my_file.fasta
>ID_1 NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>ID_2 NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>ID_3 NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG
$ awk 'sub(/^>/,"&ID_"(cnt+1)" "){cnt++} 1' my_file.fasta
>ID_1 NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>ID_2 NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>ID_3 NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

我将利用 GNU AWK 来完成此任务,让 file.txt 内容成为

>NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

然后

awk 'BEGIN{FS="^>";OFS=" "}NF==2{=">ID_" ++i}{print}' file.txt

输出

>ID_1 NODE_1_length_531158 [gcode=11] [organism=Genus species] [strain=strain]
GACCATGACACGGTTGAACCAGATCAGAGAGCAGTTACAAGCCTTCCCAGAACTGAAACA
>ID_2 NODE_2_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GGTGCCGACTACCGGAATCGAACTGGTGACCTACTGATTACAAGTCAGTTGCTCTACCTA
>ID_3 NODE_3_length_200_ [gcode=11] [organism=Genus species] [strain=strain]
GTTGCGGGGGCCGGATTTGAACCGACGACCTTCGGGTTATGAGCCCGACGAGCTACCAAG

说明:我通知GUN AWK将开头的>^)作为字段分隔符(FS),space作为输出字段分隔符(OFS),然后对于每一行,如果字段数等于 2(即它确实以 > 开头),我将第一个字段(> 之前的空字符串)设置为>ID_ 与后续数字连接。每行都是 printed.

(在 GNU Awk 5.0.1 中测试)