gtf与gff3文件【格式】【转换】

本文介绍了GFF3和GTF两种基因组注释格式,包括它们的结构、用途以及如何使用gffread进行格式转换。GFF3用于存储序列结构信息,每个条目包含9个属性,如seqid、start、end等。GTF主要用于基因注释,其第9列必须包含gene_id和transcript_id。此外,文章还提到了利用bedtools和jcvi库提取序列以及获取最长转录本的方法。

GFF3 官方

  • General Feature Format Version 3
  • 存储序列结构信息的一种数据格式。序列结构就是一个scaffold或者染色体上面每个位置都是什么序列元件。
  • GFF每一行代表一个序列元件(以#为开头的注释行除外),一行9列9个属性,必须tab分割,属性为空用“.”代替。
1. seqid - scaffold或者chromosome的名称说明
2. source - 产生一个序列元件的软件的名称或者数据源(数据库名称或者项目名称)
3. type - 序列元件的类型,例如:mRNA、CDS等等
4. start - 序列元件在scaffold或者chromosome上的起始位置,从1开始计数
5. end - 序列元件在scaffold或者chromosome上面的终止位置,从1开始计数
6. score - 该序列元件的打分,一般为该序列元件做比对时的E-value和ab initio gene prediction features时的P-value
7. strand - “+”代表该序列元件在scaffold或者chromosome的正链,反之亦反
8. phase - 可以为“0”、“1”、“2”,“0”代表该序列元件的第一个碱基为第一个密码子的第一个剪辑,“1”代表该序列元件的第二个碱基是第一个密码子 的第一个碱基,依次类推。
9. attributes - 该序列元件的一些其他属性,可以有多个每个属性之间必须以“;”分割,例如“ID=some-id;Name=some-name;Parent=some-parent”,请注意这个Parent属性,由于序列元件是很复杂的,一个序列元件(例如:exon)可能属于另外一个序列元件(例如:gene),这个Parent属性的意思就是该序列元件在哪个序列元件上面,如果一个序列元件没有Parent属性,说明他的父元件就是scaffold或者chromosome

GFF文件的第9列,从第二版开始(GFF2),所有的属性都以标签=值的方式呈现,各个属性之间以;作为分隔符


GTF官方

当前所广泛使用的GTF格式为第二版(GTF2),它主要是用来描述基因的注释。GTF格式有两个硬标准

  • 根据所使用的软件的不同,feature types是必须注明的。
  • 第9列必须以gene_id以及transcript_id开头。GTF文件的第9列同GFF文件不同,虽然同样是标签与值配对的情况,但标签与值之间以空格分开,且每个特征之后都要有分号;(包括最后一个特征):

在这里插入图片描述

格式转换

Cufflinks里面的工具gffread

#gff2gtf
gffread my.gff3 -T -o my.gtf
#gtf2gff
gffread merged.gtf -o- > merged.gff3
gffread genome.gff3 -g genome.fa -x  cds.fa
gffread genome.gff3 -g genome.fa -y  protein.fa
gffread genome.gff3 -g genome.fa -w  transcripts.fa
python -m jcvi.formats.gff bed --type=mRNA --key=ID a.gff3 > mRNA.bed
#Python 包jcvi包, 抽取 GFF文件中mRNA, key是ID
#基因
python -m jcvi.formats.gff bed --type=gene --key=ID  a.chr.gff3  > gene.bed

用bedtools提取序列,要加-s 参数(区分正反链)
bedtools getfasta -fi ./a.fasta -bed gene.bed -nameOnly -s -fo a.gene.fa
a.gene.fa就是我们需要的文件,同理也可以得到a.mRNA.fa。
提取最长转录本脚本,获得基因中最长可变剪切的序列。

<think>我们正在处理一个生物信息学领域的问题:将GFF3文件转换GTF文件。根据提供的引用信息,我们可以整理出以下关键点: 1. **引用[1]和[2]**:介绍了GTF文件GTF2格式)和GFF3文件的基本格式差异。特别指出GTF文件第9列的格式要求:必须以`gene_id`和`transcript_id`开头,标签值之间用空格分隔,每个特征后都要有分号(包括最后一个特征)。 2. **引用[3]**:提供了一个配置命令,可能是用于安装某个转换工具(如Cufflinks)的部分步骤。 3. **引用[4]**:展示了一个GFF3文件中的一行示例,其中包含了转换GTF文件所需的一些属性(如`gene_id`, `transcript_id`等)。 因此,转换的核心在于正确处理第9列(属性列)的格式转换GFF3GTF在属性列上的主要区别在于: - GFF3:使用等号(`=`)分隔标签和值,并且用分号(`;`)分隔多个属性,没有要求特定的标签顺序。 - GTF2:要求使用空格分隔标签和值,并且每个属性必须以分号结束(包括最后一个属性)。同时,必须包含`gene_id`和`transcript_id`作为前两个属性。 另外,引用[3]提到了一个配置命令,这暗示了我们可以使用特定的工具(如Cufflinks套件中的工具)进行转换。但引用[3]只是配置步骤,并没有给出具体的转换命令。 实际上,常用的转换工具有: 1. **gffread**(来自Cufflinks套件):这是一个常用的转换工具,可以将GFF3转换GTF。 2. **AGAT**(Another Gff Analysis Toolkit):这是一个功能丰富的工具包,包含多种GFF/GTF处理工具,包括转换3. **基因功能注释软件自带的脚本**:例如,Ensembl提供了一些Perl脚本用于格式转换。 基于引用信息,我们重点关注gffread,因为引用[3]提到了Cufflinks的配置。 ### 转换方法 #### 方法1:使用gffread gffread是Cufflinks套件中的一个工具,专门用于处理GFF/GTF文件。安装Cufflinks后即可使用gffread。 **安装Cufflinks**(如果尚未安装): 在Linux环境下,可以通过conda安装: ```bash conda install -c bioconda cufflinks ``` 或者从源代码安装(如引用[3]所示): ```bash # 下载cufflinks(假设版本为2.2.1) wget http://cole-trapnell-lab.github.io/cufflinks/assets/downloads/cufflinks-2.2.1.tar.gz tar -zxvf cufflinks-2.2.1.tar.gz cd cufflinks-2.2.1 ./configure --prefix=/path/to/install --with-boost=/usr/local --with-eigen=/usr/local/include/Eigen make make install ``` **转换命令**: 使用gffread将GFF3转换GTF: ```bash gffread input.gff3 -T -o output.gtf ``` 其中: - `input.gff3`:输入的GFF3文件。 - `-T`:指定输出GTF格式(默认是GFF格式)。 - `-o output.gtf`:指定输出文件名。 #### 方法2:使用AGAT AGAT(Another Gff Analysis Toolkit)是一个专门用于处理GFF/GTF文件的工具包,功能强大。 **安装AGAT**: 使用conda安装: ```bash conda install -c bioconda agat ``` **转换命令**: ```bash agat_convert_sp_gff2gtf.pl --gff input.gff3 --output output.gtf ``` #### 方法3:使用自定义脚本(适用于简单转换) 如果文件结构相对简单,也可以使用awk等命令行工具进行转换。但要注意属性列的复杂结构,尤其是当属性中有分号或等号时,处理起来可能比较复杂。 以下是一个简单的awk脚本示例,用于将GFF3转换GTF(注意:仅适用于属性结构简单的情况): ```bash awk &#39;BEGIN{FS="\t";OFS="\t"} { if ($0 ~ /^#/) { print; next } # 保留注释行 if ($9 != ".") { # 处理属性列:将等号替换为空格,并确保每个属性以分号结尾 split($9, attrs, ";"); new_attr = ""; for (i in attrs) { if (attrs[i] ~ /^ /) { attrs[i] = substr(attrs[i],2); } # 去掉开头空格 split(attrs[i], a, "="); if (length(a)>=2) { key = a[1]; value = a[2]; # 处理值:如果值被引号包围,去掉引号后重新加上引号(因为GTF要求值用引号) if (value ~ /^".*"$/) { # 已经带有引号,直接使用 new_attr = new_attr key " " value "; "; } else { new_attr = new_attr key " \"" value "\"; "; } } } # 去掉末尾空格,并确保最后一个分号后面没有空格(但标准要求每个属性后都要有分号,包括最后一个,所以我们保留分号) $9 = new_attr; } print }&#39; input.gff3 > output.gtf ``` **注意**:这个awk脚本是一个简化版本,实际应用中可能需要根据GFF3文件的具体结构进行调整,特别是当属性值包含等号或分号时。 ### 注意事项 1. 转换后务必检查GTF文件的有效性,尤其是第9列的格式是否正确(必须包含`gene_id`和`transcript_id`,且用空格分隔标签和值,每个属性以分号结束)。 2. 有些GFF3文件可能缺少`transcript_id`或`gene_id`属性,需要根据文件内容进行推断或补充。 3. 使用工具转换时,注意工具的版本,不同版本可能有不同的行为。 ### 总结 推荐使用gffread或AGAT工具进行转换,因为它们能够处理复杂的属性结构,并生成符合GTF2标准的文件。 §§相关问题§§ 1. 如何验证转换后的GTF文件是否正确? 2. 除了转换格式gffread还有哪些常用功能? 3. GFF3文件GTF文件的主要区别有哪些? </think>### GFF3文件转换GTF文件的方法 根据引用内容,GFF3GTF文件的主要差异在于**第9列属性格式**(详细信息见引用[2][^2]): - **GFF3**:使用等号分隔标签和值(如 `gene_id="CLUHARG00000005458"`) - **GTF**:使用空格分隔标签和值,且必须以分号结尾(如 `gene_id "CLUHARG00000000054";`) 以下是三种主流转换方法: --- #### 方法1:使用 `gffread` 工具(推荐) **安装配置**(引用[3][^3]): ```bash # 下载编译cufflinks(含gffread) ./configure --prefix=/path/to/install --with-boost=/usr/local/ --with-eigen=/usr/local/include/Eigen/ make make install ``` **转换命令**: ```bash gffread input.gff3 -T -o output.gtf ``` > 💡 关键参数:`-T` 指定输出GTF格式 --- #### 方法2:使用AGAT工具包 ```bash # 安装AGAT conda install -c bioconda agat # 转换命令 agat_convert_sp_gff2gtf.pl --gff input.gff3 -o output.gtf ``` --- #### 方法3:脚本手动转换 针对属性列的格式差异(引用[2][^4]),可通过Perl/Python处理: ```python # Python示例核心逻辑 with open("input.gff3") as fin, open("output.gtf", "w") as fout: for line in fin: if line.startswith("#"): continue # 跳过注释行 parts = line.strip().split("\t") if len(parts) < 9: continue # 转换第9列:key=value → key "value"; attrs = [f&#39;{k.strip()} "{v.strip()}";&#39; for item in parts[8].split(";") if "=" in item for k, v in [item.split("=", 1)]] parts[8] = " ".join(attrs) fout.write("\t".join(parts) + "\n") ``` --- ### 关键注意事项 1. **强制字段要求**(引用[2][^2]) - GTF必须有 `gene_id` 和 `transcript_id` 作为前两个属性 - 所有属性以分号结尾(包括最后一个) 2. **典型错误修复** 若转换后缺少必要字段,需预处理GFF3: ```bash # 添加缺失的transcript_id awk &#39;$3=="exon" {split($9,a,";"); $9="gene_id "a[1]"; transcript_id "a[1]"_t;"; print}&#39; input.gff3 > repaired.gff3 ``` 3. **验证工具** 使用 `gtf_validator` 检查输出文件: ```bash gtf_validator output.gtf ``` > 📌 提示:优先推荐 `gffread`,它可自动处理大多数格式兼容性问题(如CDS/exon特征转换)[^1][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值