#基因组干货#生物信息学文本处理大杂烩(四)

今天讲对于基因注释.gtf格式文件进行操作。

人类基因组注释文件在测序分析中作为非常重要的组装参照物,并且在其中包含了几乎人类基因组所有的基本信息,我们从GENCODE(https://www.gencodegenes.org/) 下载gtf格式的注释文件,
#基因组干货#生物信息学文本处理大杂烩(四)_第1张图片
这里下载hg19版本的gtf文件:
#基因组干货#生物信息学文本处理大杂烩(四)_第2张图片
# 使用wget命令下载注释文件:
wget -c -t 0 ftp://ftp.sanger.ac.uk/pub/gencode/Gencode_human/release_19/gencode.v19.annotation.gtf.gz
# -c 表示端点续传
# -t 表示反复尝试的次数,0为不限次数 
# 解压缩并删除原文件:
gunzip ./gencode.v19.annotation.gtf.gz
# 查看这个gtf文件大小,注意最后还有个点,表示当前目录:
du -a -h -d 1 .
# -a表示显示当前目录下每个文件的磁盘使用情况
# -h表示以以K,M,G为单位,提高信息的可读性
# -d N与--max-depth=N一样,表示只深入到第N层目录,设置为0,即表示不深入到子目录
GTF全称为gene transfer format,这个GTF注释文件压缩后只有40M,但解压出来后有1.1个G,信息及其冗余,内容格式是这样的,GTF文件都由9列数据组成,字段必须tab分开,除了每一行的最后一个字段之外,都必须包含有值;空列需要用英文点号.标示,具体每一列的说明如下:
  1. seqname - 染色体或scaffold名称,染色体名称可以没有"chr"前缀,并且这些名称必须时ensemble中的。
  2. 注释来源
  3. 序列类型
  4. start - 起始为点,1-base格式。
  5. end - 终止为点,1-base格式.
  6. score - 浮点型数值.没有就用.表示
  7. strand - + (forward) 或 - (reverse).
  8. frame - One of '0', '1' or '2'. '0' 表示序列的第一个碱基开始是密码子, '1'表示序列的第二个碱基开始是密码子,以此类推。没有就用.表示
  9. attribute - 封号分割的序列特征信息,包括基因ID,转录本ID,基因类型等.
    更具体详细的信息可以查看这里:https://www.gencodegenes.org/data_format.html
#基因组干货#生物信息学文本处理大杂烩(四)_第3张图片
在这个gtf文件中包含人类基因组所有的protein-coding, lncRNA, miRNA, pseudogene,snoRNA等所有转录本信息,gtf文件的9列之间都是Tab分割的,但最后一列特征列,内容之间是用封号空格分割的.awk 默认分割是[\t ]+也就是一个或多个Tab或空格,这里我们为了更好的对GTF文件的第九列分割,重新定义FS(field separator,分割符)为"\t|(; )",表示Tab或封号空格 分割。NR表示Number of row,也就是行号,如下图,GTF文件前5行是不需要的,所以加个判断条件NR>5
#基因组干货#生物信息学文本处理大杂烩(四)_第4张图片

下面的命令提取了第1列的染色体, 第9列的geng_id和第10列的转录本ID信息:

awk 'BEGIN{
    FS="\t|(; )"
    }
    {
    if(NR>5){
        print $1,$9,$10
        }
    }' gencode.v19.annotation.gtf | head 
#基因组干货#生物信息学文本处理大杂烩(四)_第5张图片

按照上面定义的分割符,1-8列的信息还和上面的一致,但9-13的信息已经是gene_id , transcript_id , gene_type , gene_status , gene_name以此类推。

这样我们就可以提取想要的信息了,比如我只想要蛋白编码基因的信息,但不包括转录本:

awk 'BEGIN{
    FS="\t|(; )";
    #设置输出分割符为Tab,默认为空格
    OFS="\t"
    }
    {
    #注意要加反斜杠对双引号转义:
    if(NR>5 && $3=="gene" && $11=="gene_type \"protein_coding\""){
        print $1,$4,$5,$13,$7,$11
        }
    }' gencode.v19.annotation.gtf >./protein_coding_gene.txt
# 使用gedit 查看一下:
gedit ./protein_coding_gene.txt
#基因组干货#生物信息学文本处理大杂烩(四)_第6张图片

这样我们就获得了注释文件中的所有20345个蛋白编码基因的位置信息及基因名。但我们还需要进一步对于输出信息进行优化,比如输出时第四列去掉"gene_name"这样的字段,只保留后面的名称,我们下次继续。
更多原创精彩内容敬请关注生信杂谈

#基因组干货#生物信息学文本处理大杂烩(四)_第7张图片

你可能感兴趣的:(#基因组干货#生物信息学文本处理大杂烩(四))