【发布时间】:2014-07-30 01:17:30
【问题描述】:
我有一个非常大的文件,包含开始和结束位置,但这里有一个 sn-p:
(A) 11897 11976
(B) 17024 18924
(C) 25687 25709
和另一个带有开始和结束位置的文件(也是一个 sn-p):
(i) 3631 5899
(ii) 11649 13714
(iii) 23146 31227
我想知道值文件 2 是否包含文件 1 中值的开始和结束位置在其范围内。
我想要的结果文件如下所示:
(ii) 11649 18924 (A) 11897 11976
(iii) 23145 31277 (C) 25687 25709
我写了一个perl代码:
open my $firstfile, '<', $ARGV[0] or die "$!";
open my $secondfile, '<', $ARGV[1] or die "$!";
while (<$firstfile>) {
@col=split /\s+/;
$start=$col[1];
$end= $col[2];
while (<$secondfile>) {
@seccol=split /\s+/;
$begin=$seccol[1];
$finish=$seccol[2];
print join ("\t", @col, @seccol), "\n" if ($start>=$begin and $end<=$finish);
}
}
但我的结果文件只显示了第一个匹配项,而没有显示其他匹配项:
(ii) 11649 18924 (A) 11897 11976
有什么建议吗?
【问题讨论】:
-
我不认为这是解决方案,但错字:
$begin=$secol[1];应该是$seccol[1]。还有一个机会告诉某人在 Perl 脚本的顶部use strict; use warnings;。 -
没错,但这只是我在这里发布问题时的一个错字。现在编辑了。
-
就您的文件而言,“非常大”有多大?
标签: perl