如何使用 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_
与后续数字连接。每行都是 print
ed.
(在 GNU Awk 5.0.1 中测试)
我有一个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_
与后续数字连接。每行都是 print
ed.
(在 GNU Awk 5.0.1 中测试)