NCBI上的NR数据库过于冗余,且物种注释的taxonomy文件中names.dmp和nodes.dmp的物种信较为复杂,因此我们可以通过taxontk这个工具将不同层级的物种信息整合成像下面一张表,里面包含普通的谱系,界门纲目科属种;
根据这样的表,再结合比对数据库和prot.accession2taxid.gz获取的taxid对应序列名的文件,可获得物种注释信息。
1. Taxontk的下载和安装以及配置
https://bioinf.shenwei.me/taxonkit/download/ (十分详细的Taxontk安装和使用的教程)
2. 提取物种taxid
#taxontk list 提取物种taxid,以细菌为例,其ids为2
taxontk list --ids 2 --indent "" > bacteria_taxid.txt
#3090为plant 2为bacteria; 2157为Archaea;10239 为Viruses;2759为Eukaryota;4751为Fungi
#若是未能将taxonomy文件中的name.dmp和nodes.dmp文件复制到指定的./taxontk位置,可通过 --data-dir设置文件位置
3. reformat 生成标准层级物种注释
TaxonKit可以用自定义内容替代缺失的分类单元,如用“__”替代,甚至,TaxonKit还可以用更高层级的分类单元信息来补齐缺失的层级 (-F/--fill-miss-rank
)
less bacteria_taxid.txt \
| taxonkit lineage \
| taxonkit reformat -f "{k}\t{p}\t{c}\t{o}\t{f}\t{g}\t{s}" -F -P \
| csvtk cut -t -f -2 \
| csvtk add-header -t -n taxid,kindom,phylum,class,order,family,genus,species \
| csvtk pretty -t > bacteria_taxid.txt
输出格式可选只输出部分分类学水平,还支持制表符("\t"
),再配合作者的另一个工具csvtk,可以输出漂亮的结果。
其它有用的选项:
-P/--add-prefix
:给每个分类学水平添加前缀,比如s__species
。-t/--show-lineage-taxids
:输出分类学单元对应的TaxID。-r/--miss-rank-repl
: 替代没有对应rank的taxon名称-S/--pseudo-strain
: 对于低于species且rank既不是subspecies也不是stain的taxid,使用水平最低taxon名称做为菌株名称。
这个脚本运行后,可能会出现报错:
[ERRO] record on line 1583: wrong number of fields
这是因为一些taxid没有匹配到谱系,导致出现空行,在进行csvtk add-header 添加一行时就会报错。在查看csvtk add-header帮助文档后,发现了这一个参数:
-I, --ignore-illegal-row ignore illegal rows
因此,在上行代码 csvtk add-header 后加上-I即可完美解决。