2014-06-09 27 views
-2

我有一个很大的文件是这样的:Perl不正确打印的最后一行

scaffold_58 Cufflinks exon 753 993 . + . gene_id "GRMZM6G781015";transcript_id "GRMZM6G781015_T03";tss_id "TSS125032" 
scaffold_58 Cufflinks exon 753 1642 . + . gene_id "GRMZM6G781015";transcript_id "GRMZM6G781015_T02";tss_id "TSS125032" 
scaffold_58 Cufflinks exon 753 801 . + . gene_id "GRMZM6G781015";transcript_id "GRMZM6G781015_T01";tss_id "TSS125032" 
scaffold_58 Cufflinks exon 871 993 . + . gene_id "GRMZM6G781015";transcript_id "GRMZM6G781015_T01";tss_id "TSS125032" 

下面的代码是指使用正则表达式来改变gene_id ..

use warnings; 
open $final, ">", "./newassembly.gtf"; 
open NEWREF3, "<", $ARGV[0]; 
while ($line = <NEWREF3>) { 
    if ($line =~ /gene_id "([A-Za-z0-9:\-._]*_[oO])([_.][0-9]*)";/) { 
     $genename = $1; $ext = $2; 
     $allname = $genename.$ext; 
     if (!defined $hash_o_count{$genename}{$allname}) { 
      $num = keys %{$hash_o_count{$genename}}; 
      $hash_o_count{$genename}{$allname} = $num + 1; 
     } 
     $num = keys %{$hash_o_count{$genename}}; 
     $line =~ s/gene_id "([A-Za-z0-9:\-._]*_[oO])([_.])[0-9]*";/gene_id "$1$2$hash_o_count{$genename}{$allname}";/g; 
     print $final $line; 
    } 
    elsif ($line =~ /gene_id "([A-Za-z0-9:\-._]*_[xX])([_.][0-9]*)";/) { 
     $genename = $1; $ext = $2; 
     $allname = $genename.$ext; 
     if (!defined $hash_x_count{$genename}{$allname}) { 
      $num = keys %{$hash_x_count{$genename}}; 
      $hash_x_count{$genename}{$allname} = $num + 1; 
     } 
     $num = keys %{$hash_x_count{$genename}}; 
     $line =~ s/gene_id "([A-Za-z0-9:\-._]*_[xX])([_.])[0-9]*";/gene_id "$1$2$hash_x_count{$genename}{$allname}";/g; 
     print $final $line; 
    } 
    else { 
     print $final $line; 
    } 
} 
close NEWREF3; 

但是,输出的代码在文件的末尾给出了一个截断的行......最后一行应该穿过代码的最后一行。做一个head的输出文件...

scaffold_58 Cufflinks exon 1153 1642 . + . gene_id "GRMZM6G781015";transcript_id "GRMZM6G781015_T01";tss_id "TSS125032" 
scaffold_6 Cufflinks exon 1 289 . + . gene_id "GRMZM6G441368";transcript_id "GRMZM6G441368_T01";tss_id "TSS125033" 
scaffold_6 Cufflinks exon 517 591 . + . gene_id "GRMZM6G441368";transcript_id "GRMZM6G441368_T01";tss_id "TSS125033" 
scaffold_6 Cufflinks exon 683 905 [email protected]:/home... 

为什么这个以及如何避免这个?

谢谢。

+2

请包括['使用严格的;'](http://perldoc.perl.org/strict.html)和['使用警告;'](http://perldoc.perl.org/warnings.html)在每个perl脚本中,特别是如果你要求帮助。这是一个简单的度量,可以揭示许多直接的错误,否则您可能会浪费大量时间搜索 – Miller

+1

您没有提供与正则表达式中的任何案例相匹配的数据示例,因此这四行代码将转到“其他'块。此外,您没有提供失败线路的样本。 –

回答

0

尝试关闭文件./newassembly.gtf。关闭文件总是一个好习惯。

为了这样做,它很简单,只要: close $file;close NEWREF3;

+0

解决了,谢谢! – user2886545