从表格(包括)获取范围

时间:2014-06-14 16:55:36

标签: perl

我想打印指定范围内的所有行。我到目前为止的测试代码是:

#!/usr/bin/perl
use warnings;
use strict;
my $start = "25823";
my $end = "35841";

while (<DATA>) {
    if ( /(\S+)?\t(\d+)?\t(\d+)?/ ) {
        my $feat = $1;
        my $datastart = $2;
        my $dataend = $3;
        if ( $datastart >= $start && $dataend <= $end ) { print }
    }
}

__DATA__
A       23594   24158 
W       25646   25978
X       26189   26770
Y       31694   33466
Z       34568   36125
B       37516   38912

但是这只打印X和Y行,它们在范围内,但是以独占形式。但是我想获得所有包含线,以便输出为W,X,Y和Z.如何实现?

提前致谢。

1 个答案:

答案 0 :(得分:2)

如果您想要重叠范围(而不仅仅是完全包含),您必须扩展您的IF条件。

注意:由于我不了解您的规范,您必须决定下面是<还是<=

#!/usr/bin/perl
use warnings;
use strict;
my $start = "25823";
my $end = "35841";

while (<DATA>) {
    chomp;
    my ($feat, $datastart, $dataend) = split "\t";
    if (grep {$start < $_ && $_ < $end} ($datastart, $dataend) ) {
        print "$_\n"
    }
}

__DATA__
A   23594   24158 
W   25646   25978
X   26189   26770
Y   31694   33466
Z   34568   36125
B   37516   38912

输出:

W   25646   25978
X   26189   26770
Y   31694   33466
Z   34568   36125