2014-06-14 2 views
0

지정된 범위 내에있는 모든 줄을 인쇄하고 싶습니다.표에서 범위 가져 오기

#!/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가되도록 모든 포함 라인을 얻고 싶습니다. 어떻게 수행 할 수 있습니까?

미리 감사드립니다.

+0

그러나, W를 들어, 25,646 미만 25823. – toolic

+0

예,하지만 25823 내가 포괄적 인 범위를하고 싶은 그 이유는, 25,978보다 작습니다. – PedroA

+0

왜 downvote? 나는 대답을 받아 들였고 그것을 upvoted. – PedroA

답변

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 
관련 문제