根据正则表达式模式更改fasta标头

问题描述 投票:1回答:3

我有一个带有两个模式的标题的fasta文件

>256_Org1 
MAVVIIKDAADDSLARRD

>Org2_10005 
DSLARRDMAVVIIKDAA

我想只保留单词并删除数字。我尝试使用awk一个衬垫建议,但用分隔符'_'分离并跟随{print $1}256(错误)或Org2(右)。我期望的输出是

>Org1 
MAVVIIKDAADDSLARRD

>Org2 
DSLARRDMAVVIIKDAA

在textwrangler中,我可以分两步替换它,1用\>\d+\_替换为>,2用\_\d+\n替换为\n。但我有几百个文件,并希望使用单行。有什么建议?

regex awk fasta
3个回答
1
投票

使用GNU sed:

sed -E 's/^>[0-9]+_/>/; s/_[0-9]+ *$//' file

输出:

>Org1 
MAVVIIKDAADDSLARRD

>Org2
DSLARRDMAVVIIKDAA

1
投票

以下awk解决方案也可以帮助您。

awk 'NF && />/ && /[0-9]+/{sub(/_[0-9]+/,"");sub(/[0-9]+_/,"")} 1' Input_file

0
投票

一个简单的sed脚本:

/^>/!b                 # if it's not a FASTA header line, don't touch it
s/\([>_]\)[0-9]*_/\1/g # zap internal all-numeric field
s/_[0-9]*$//           # zap terminal all-numeric field if present

作为sed单行,您可以申请所有文件:

sed -i~ -e '/^>/!b' -e 's/\([>_]\)[0-9]*_/\1/g' -e 's/_[0-9]*$//' *.fasta

-i~使sed执行就地替换,原始文件备份为文件名,末尾附加了波浪号。

并非所有的sed实现都像多个-e论点,而且我对[0-9]*略显草率,因为并非所有sed方言都有办法说[0-9]+在这里更合适。如果你有sed -rsed -E这将是一个很好的改进,但再次,没有关于你在哪个平台的信息,我不想发布推测变化。

© www.soinside.com 2019 - 2024. All rights reserved.