2013-10-30 2 views
-3

좌표 목록을 분석하려고합니다. txt 파일은 다음과 같이 설정 :perl의 txt 목록 분석

ID START END 
A 10 20 
B 15 17 
C 20 40 

을 시작과 끝은 사용자가 지정한 영역 내에 포함되어있는 경우 나, 예를 들어, 확인이 데이터 집합을 확인 할 방법 START = 10 END = 15?

어떤 도움을 크게

감사 // 편집 //

내가 각 라인을 통해보고 시작/끝이 사용자가 지정한 범위에있는 경우 찾을 필요가
if(@AGRV != 4) { 
    print STDOUT "Searches genomic data for CNV within range. \n"; 
    print STDOUT "CNV FILE FORMAT: <ID><CHR>BPS><BPE><AGE><etc...> \n"; 
    print STDOUT "USAGE: [CNVLIST][CHR][BPS][BPE][OUTFILE] \n"; 
    exit; 
} 

open(CNVLIST,"<$ARGV[0]"); 
open(OUTFILE,">$ARGV[3]"); 

$BPS = $ARGV[1]; 
$BPE = $ARGV[2]; 

#put CNV file in hash table 
$line = <CNVFILE>; 
while($line = <CNVFILE>) { 
    chomp $line; 
    ($Cchr,$CS,$CE,$CID) = split(/\t/,$line); 
} 

. 당신은 두 번째와 세 번째 필드 split() 각 라인을 확인할 수 있습니다

+2

아직이 문제를 직접 해결하려고 시도 했습니까? 그렇지 않은 경우, 작성한 코드를 보여주는 질문을 게시하고 노력하십시오. [FAQ]와 [Ask]를 읽어주십시오. –

+0

은 완전히 사용자 정의 범위 내에 있거나 적어도 사용자 지정 범위와 겹칩니다. – ysth

답변

1

는 당신을 당신이 ID가 서로 겹치지 않을 것이라고 가정 할 수 있지만, 가정은하지 않습니다 여부 불분명 해시를 사용하여 범위 내에있는 행을 저장할 수 있습니다. ID가 중복 될 가능성이있는 경우 push @{$result{id}}, [$start, $end];을 사용할 수 있다고 생각하지만 데이터 구조가 좀 더 복잡해집니다.

#!/usr/bin/perl 

use strict; 
use warnings; 

use Data::Dumper; 

my $in_file = "input.txt"; 
# User-specified region 
my $range_start = 10; 
my $range_end = 15; 

open my $fh, $in_file or die $!; 

my %result; 
while (<$fh>) { 
    my ($id, $start, $end) = split " ", $_; 
    next unless $start =~ /\d/; 

    # Swap if START is larger than END 
    ($start, $end) = ($end, $start) if $start > $end; 

    $result{$id} = [$start, $end] 
     if $start >= $range_start and $end <= $range_end; 
} 

print Dumper(%result); 
0

: 그것은 세 개의 인수를 받아들이

#!/usr/bin/env perl 

use strict; 
use warnings; 

my ($start, $end) = (shift, shift); 
die if $start > $end; 

## Skip header 
<>; 

while (<>) { 
    chomp; 
    my @f = split; 
    if ($f[1] <= $start && $f[2] >= $end) { 
     printf qq|%s\n|, $_; 
    } 
} 

는, 첫 번째가 시작 지역이며, 두 번째는 최종 지역이며, 마지막 하나는 파일입니다 과정. 조건을 전달하는 모든 행을 출력하도록 인쇄합니다.

실행이 같은 :

perl script.pl 10 15 infile 

그 수율 :

A  10  20