从gtf到gff

从Ensemble数据库中下载到的基因组坐标文件通常是gtf,在某些处理中有些不便,这里笔者提供一种把gtf转化成gff格式的方法,仅供参考。针对具体的文件,可以对脚本的细节做相关调整。


#!/usr/bin/perl
use strict;
use warnings;
die "use gtf\n" unless @ARGV==1;
my $gtf=shift;
my %gene;
my %mRNA;
my %info;
$gtf=~/\.gz$/ ? (open IN, "gzip -cd $gtf|"||die) : (open IN,$gtf||die);
while (<IN>){
	chomp;
	next if /^#/;
	my @cut=split/\t/,$_;
	my $id=(split/\s+/,$cut[8])[4];
	$id=~s/\"//g;
	$id=~s/;//;
	my $gene=(split/\s+/,$cut[8])[2];
	$gene=~s/\"//g;
	$gene=~s/;//;
	if($cut[2] eq "CDS" || $cut[2] eq "exon"){
		my $join=join("\t",($cut[0],$cut[1],"CDS",$cut[3],$cut[4],$cut[5],$cut[6],$cut[7],"Parent=$id;")) if $cut[2] eq "CDS";
		push @{$gene{$id}},$join if $join;
		push @{$mRNA{$id}},$cut[3],$cut[4];
		$info{$id}=[$cut[0],$cut[1],$cut[6],$gene];
	}

}
close IN;
my @output;
foreach my $key (keys %gene){
	@{$mRNA{$key}}=sort{$a<=>$b} @{$mRNA{$key}};
	my $out=join "\t", $info{$key}[0],$info{$key}[1],"mRNA",$mRNA{$key}[0],$mRNA{$key}[-1],"\.",$info{$key}[2],"\.","ID=$key;Gene=$info{$key}[3]";
	push @output,$out;
	for(my $i=0;$i<@{$gene{$key}};$i++){
		push @output,$gene{$key}[$i];
	}
}
my @output_sort=map{$_->[3]}
			sort{$a->[0] cmp $b->[0] || $a->[1] <=> $b->[1]||$a->[2] cmp $b->[2]}
				map{[(split/\t/,$_)[0,3,2],$_]}@output;
print "$_\n" for@output_sort;


### 将 GTF 文件转换为 GFF 格式的解决方案 在生物信息学领域,GTFGFF 是两种常用的基因组注释文件格式。虽然它们非常相似,但在某些字段上存在差异。为了实现从 GTFGFF 的转换,可以采用多种工具和方法。 #### 方法一:使用 `gtfToGenePred` 和后续脚本 Bioinformatics 工具包如 UCSC 提供了一个名为 `gtfToGenePred` 的程序,它可以将 GTF 文件转换为 GenePred 格式[^1]。之后可以通过编写简单的 Python 或 Perl 脚本来进一步调整该文件以满足 GFF 的标准。 ```bash gtfToGenePred -genePredExt your_input.gtf stdout | genePredToGff stdin output.gff ``` 上述命令中的第二部分假设有一个额外的工具 `genePredToGff` 可用于完成最终转换过程[^2]。 #### 方法二:利用 Bioconductor 中的 R 包 R 语言提供了强大的生信数据处理能力。通过安装并加载 `GenomicFeatures` 包,可以直接读取 GTF 并将其导出为其他格式的数据表,进而手动编辑成符合 GFF 规范的形式[^3]: ```r library(GenomicFeatures) # 创建 TxDb 对象 txdb <- makeTxDbFromGFF("your_file.gtf", format="gtf") # 导出到 data.frame 后保存为 .txt/.tsv 文件再修改成为 gff 风格 export(txdb, file="output.txt") ``` 此方式适合熟悉 R 编程环境的研究人员操作。 #### 方法三:借助 SeqKit 实现自动化流程 SeqKit 不仅能够帮助提取序列片段,还支持基于特定条件筛选记录等功能,在一定程度上也可以辅助完成此类任务。尽管它本身并不直接提供 GTf-to-GFF 功能,但配合 shell 命令管道流技术可间接达成目标: ```bash seqkit fx2tab --line-width 0 input.gtf | awk '{OFS="\t"; $9=gensub(/"/,"","g",$9); split($9,a,";"); ... }' > intermediate.tsv ``` 以上仅为伪代码示意,实际应用需根据具体需求定制化开发相应逻辑来解析第九列复杂属性字符串,并重新构建标准化描述符。 --- #### 注意事项 无论采取哪种方案,都需要特别关注源文件的质量以及各版本间细微差别带来的兼容性问题。此外,由于不同软件对输入参数定义可能存在分歧,因此建议先仔细阅读官方文档说明后再执行相关指令。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值