首页 > 解决方案 > 替换多 fasta 文件 awk 的标题

问题描述

我正在尝试使用 awk 从多 fasta 文件中更改标题。

我的文件如下所示:

>NS500106:288:HGHTHAFXY:1:11101:16650:2011:CTATAC;size=206083;
GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
>NS500106:288:HGHTHAFXY:1:11101:1149:1903:CTATAC;size=19175;
CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG

我正在使用这个命令:

awk '/[^;]*/{print "Variant_" ++i; next} {print}' < input.fasta > output.fasta

其中,/[^;]*/匹配到第一次出现分号的行,并将标题的匹配部分替换为 Variant_1、Variant_2 等。

上述命令将整个标题更改为 Variant_1 等等,并且也不打印序列行。

我该如何解决这个问题?

我想要的输出如下:

Variant_1;size=206083;
GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
Variant_2;size=19175;
CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG

标签: bashawk

解决方案


其中,/[^;]*/ 匹配直到第一次出现分号的行,并将标题的匹配部分替换为 Variant_1、Variant_2 等。

不,这是错误的。它处理包含零个或多个非分号字符的行(例如所有行)并打印行号Variant_n在哪里n{print}部分永远达不到。

这是我的方法:

$ awk 'BEGIN{FS=OFS=";"}NF>1{$1="Variant_"++i}1' file
Variant_1;size=206083;
GTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG
Variant_2;size=19175;
CAGCGAGAGCGAGACGCAGCCGGTGAACCGCGTGGCGTACAACGTCGGCGGGCAGATGGCCACCAACAACCAGAGCTCCA
CCACTGCCCCCGCGACCGGCACGTACAACCTCCAGGAAATCGTGCCCGGCAGCGTGTGGATGGAGAGGGACGTG

推荐阅读