利用gff文件提取基因结构,结果文件是空的

这是我的GFF文件

attachments-2020-08-ImwhNhwR5f3cc82467dc4.png

下图是运行程序,运行过程中没报错,但结果文件是空的

attachments-2020-08-36UPzaPA5f3cc87c0f2db.png
这是ID

attachments-2020-08-YZNWRKtW5f3cc90e74661.png

这是脚本文件


Sirius21小时前
use Getopt::Long;
my %opts;
use Data::Dumper;
GetOptions( \%opts, "in1=s", "in2=s", "out=s", "h" );
if (   !defined( $opts{in1} )
|| !defined( $opts{in2} )
|| !defined( $opts{out} )
|| defined( $opts{h} ) )
{
&USAGE;
}
open( IN1, "$opts{in1}" )  || die "open $opts{in1} failed\n";
open( IN2, "$opts{in2}" )  || die "open $opts{in2} failed\n";
open( OUT, ">$opts{out}" ) || die "open $opts{out} failed\n";
my %gffs;
while (<IN1>) {
chomp;
next if /^#/;
my @b = split/\st/, $_;
$gffs{$b[0]} = 1;
}
#print Dumper(\%gffs);
while (<IN2>) {
chomp;
next if (/^#/);
my @a = split /\t/, $_;
next if $a[2]=~/exon/i;
if ($a[2] =~/^mRNA$/i or $a[2] =~/^transcript$/i ) {
($id1) =  ($a[8] =~ m/ID=([^;]*)/);
}elsif ( $a[2] =~/^CDS$/i or $a[2] =~/utr/i ) {
($id1) =  ($a[8] =~ m/Parent=([^;]*)/);
}else{
next;
}
if ( exists $gffs{$id1} ) {
print OUT "$_\n";
}
}
close OUT;
close IN1;
close IN2;
sub USAGE {
print "usage: perl $0 -in1  mRNA_id.txt -in2  genome.gff3  -out gene_location.txt ";
exit;
}
老师,这是全部脚本内容





请先 登录 后评论

1 个回答

omicsgene - 生物信息
擅长:重测序,遗传进化,转录组,GWAS

看脚本应该是没问题的,可能是你的输入ID列表文件有问题,windows中的换行符和linux的不兼容,建议编辑的时候设置一下UTF-8

https://www.omicsclass.com/article/395   再重新输入试试;


这个地方改成:

my @b = split/\s+/, $_;

attachments-2020-08-oi4xVARO5f42616cc7445.png

请先 登录 后评论