Linux/Ubuntu下提取FASTA标题最后分隔符后数字并追加至标题末尾
解决FASTA标题行修改需求
你可以用以下sed命令实现需求,针对以>开头的标题行,提取最后下划线后的数字并追加到标题末尾:
sed -E 's/^>(.*)_([0-9]+)$/>\1_\2_\2/' filename.fasta
命令解释:
-E:启用扩展正则表达式,让括号等正则符号无需额外转义^>(.*)_([0-9]+)$:精准匹配FASTA标题行:^>:匹配行首的>符号,确保只处理标题行(.*):捕获>之后、最后一个下划线之前的所有内容(比如sequence_1_g)([0-9]+):捕获最后一个下划线后的数字(比如1)
>\1_\2_\2:替换后的格式,其中:\1代表第一个捕获组的内容,\2代表第二个捕获组的数字- 最终拼接成
>原标题内容_数字的格式,比如原标题>sequence_1_g1会变成>sequence_1_g1_1
直接修改原文件(可选)
如果你确认输出符合预期,想要直接修改原FASTA文件,可以添加-i参数(注意:此操作会直接覆盖原文件,建议先备份):
sed -i -E 's/^>(.*)_([0-9]+)$/>\1_\2_\2/' filename.fasta
你之前找到的sed -E 's/.*_//' filename.fasta是单纯提取最后下划线后的内容,而上面的命令通过捕获分组保留了原标题的全部内容,同时把提取到的数字追加到末尾,完美匹配你的需求。
内容的提问来源于stack exchange,提问作者Jen
相关产品推荐
相关产品推荐

