我有一个带有两个模式的标题的fasta文件
>256_Org1
MAVVIIKDAADDSLARRD
>Org2_10005
DSLARRDMAVVIIKDAA
我想只保留单词并删除数字。我尝试使用awk一个衬垫建议,但用分隔符'_'
分离并跟随{print $1}
给256
(错误)或Org2
(右)。我期望的输出是
>Org1
MAVVIIKDAADDSLARRD
>Org2
DSLARRDMAVVIIKDAA
在textwrangler中,我可以分两步替换它,1用\>\d+\_
替换为>
,2用\_\d+\n
替换为\n
。但我有几百个文件,并希望使用单行。有什么建议?
使用GNU sed:
sed -E 's/^>[0-9]+_/>/; s/_[0-9]+ *$//' file
输出:
>Org1 MAVVIIKDAADDSLARRD >Org2 DSLARRDMAVVIIKDAA
以下awk
解决方案也可以帮助您。
awk 'NF && />/ && /[0-9]+/{sub(/_[0-9]+/,"");sub(/[0-9]+_/,"")} 1' Input_file
一个简单的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 -r
或sed -E
这将是一个很好的改进,但再次,没有关于你在哪个平台的信息,我不想发布推测变化。