Archives

优雅的TSV文件进行列注释: tabtk_definition

今天开始介绍一些处理制表符分隔文件的小工具,在生物信息数据分析过程中大部分输出格式都是以’\t’分隔的文件,比如 BLAST 输出格式,我们习惯使用 ‘-fmt 6’ 或者 ‘-fmt 7’.

此类工具比较多(包含 csv 类),比如: tabtk , tsv-utils-dlang, csvkit, 还是老规矩, 尽量避免重复造轮子。

一、tabtk_definition 介绍

tabtk_definition 就是使用一个key/value的键值对 db 对 指定文件的列进行注释,命令行接口:

$tabtk_definition
Usage: tabtk_definition [options] <db> <tab>
Options:
  -c INT     target col for annotation, default: 1
  -d char    delimitor between key and definition, default: ' '
  -h char*   header name, default: 'definition'
  -v         print version number

该程序接收三个可选参数:

-c, 指定列, 默认为1;
-d,  分隔符,当前支持单个字符的分隔, 默认是'\t', 即注释信息,新加一列, 其它常用参数: "," , " "
-h,  表头文件名字,默认使用 "definition"

二、使用场景实例及其用法

核酸序列对NT执行metablast:

序列比对输出格式设定为:

-fmt '6 qseqid qlen slen sseqid staxid bitscore score evalue pident qstart qend sstart send'

输入结果(blast.tab):

#qseqid qlen slen sseqid staxid bitscore score evalue pident qstart qend sstart send
F_g25622_i11 575 15763 gi|389568466|gb|JQ769304.1| 7038 658 356 0.0 99.721 217 575 12178 12536

其中第五列 7038 就是 gi|389568466|gb|JQ769304.1| 对应的 staxid 信息,我们期望获得 gi|389568466|gb|JQ769304.1| 的科学命名(NT库这个信息是没有的),现在只只得staxid信息,所以需要做一个键值表:”staxid\tssciname” 文件 进行映射。

db库文件(node.name.map):

1       root
2       Bacteria
6       Azorhizobium
7       Azorhizobium caulinodans
9       Buchnera aphidicola
10      Cellvibrio
11      Cellulomonas gilvus
13      Dictyoglomus
14      Dictyoglomus thermophilum
16      Methylophilus
17      Methylophilus methylotrophus
18      Pelobacter
19      Pelobacter carbinolicus
20      Phenylobacterium
21      Phenylobacterium immobile

执行:

tabtk_definition -c 6  -h  ssname  node.name.map  blast.tab

这样我们就可以看到结果:

#qseqid qlen slen sseqid staxid ssname bitscore score evalue pident qstart qend sstart send
F_g25622_i11 575 15763 gi|389568466|gb|JQ769304.1| 7038  Bemisia tabaci  658 356 0 99.721 217 575 12178   12536

本文材料为 BASE (Biostack Applied bioinformatic SEies ) 课程 Linux Command Line Tools for Life Scientists 材料, 版权归 上海逻捷信息科技有限公司 所有

Last Update: 2017-09-25 12:53 PM

Comments are closed.