如何用Bash的Awk/sed命令仅保留FASTA头部的物种名称?
处理FASTA文件头部编号的正确方法
你之前用的sed 's/[1-9]/./g'完全没命中需求——它只是把数字替换成点,根本没处理FASTA头部里的编号前缀。要实现只保留物种名的目标,得针对性处理以>开头的行,把>后到第一个空格的编号部分删掉。
用sed实现
sed '/^>/s/^>[^ ]* />/' silva_species_assignment_v132.fa > textfile.txt
/^>/:只匹配以>开头的FASTA头部行s/^>[^ ]* />/:把行首>后面所有非空格的字符(也就是编号)替换成>,直接保留空格后的物种名
用awk实现
如果你更习惯awk,这个命令也能达成目标:
awk '/^>/ {sub(/^>[^ ]* /, ">"); print; next} 1' silva_species_assignment_v132.fa > textfile.txt
/^>/:匹配头部行sub(/^>[^ ]* /, ">"):替换掉头部行里的编号前缀next:跳过后续处理,直接打印修改后的头部行1:对非头部行执行默认的打印操作
运行上面任意一个命令,都能得到你想要的输出:
>Regiella insecticola AGAGTTTGATCATGGCTCAGATTGAACGCTGGCGGCAGGCCTAACACATGCAAGTCGAGCGGCAGCGGGGAGTAGCTTGCTACTCTGCCGGCGAGCGGC >Pantoea dispersa GCAGCTACACATGCAAGTCGAACGGCAGCACAGAAGAGCTTGCTCTTTGGGTGGCGAGTGGCGGACGGGTGAGTAATGTCTGGGAAACTGCCCGATGGA
内容的提问来源于stack exchange,提问作者Abhisek
相关产品推荐
相关产品推荐

