-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...
为什么这个以及如何避免这个?
谢谢。
请包括['使用严格的;'](http://perldoc.perl.org/strict.html)和['使用警告;'](http://perldoc.perl.org/warnings.html)在每个perl脚本中,特别是如果你要求帮助。这是一个简单的度量,可以揭示许多直接的错误,否则您可能会浪费大量时间搜索 – Miller
您没有提供与正则表达式中的任何案例相匹配的数据示例,因此这四行代码将转到“其他'块。此外,您没有提供失败线路的样本。 –