2016-11-20 1 views
0

유전자 전 사물을 가진 파일의 고유 ID를 만들고 싶습니다. 각 행은 transcript_id와 intron으로 구성되며, 염색체 : start_coord-end_coord : strand 형식으로 조정됩니다. 내 파일은 다음과 같습니다 : 나는 반복적 transcript_ids (1 열)를 결합 할배열의 해시로 고유 ID 생성

CUFF.59321  chr7:134136506-134143748:- 
CUFF.59321  chr7:134135655-134136337:- 
CUFF.59321  chr7:134134550-134135537:- 
CUFF.59321  chr7:134133872-134134471:- 
CUFF.59321  chr7:134133246-134133748:- 
CUFF.59321  chr7:134132814-134133138:- 
CUFF.57276  chr7:25163747-25164818:- 
CUFF.57276  chr7:25163469-25163569:- 

시작 엔드 그들을 위해 조정합니다. CUFF.57276에 대한 예 : 나는 배열의 해시를 사용이를 위해

CUFF.57276 chr7:25163747-25164818:25163469-25163569:- 

.

#!/usr/bin/perl -w 

use strict; 

my $input_gtf = shift @ARGV or die $!; 

my %hash; 

open (FILE, "$input_gtf") or die $!; 
while (<FILE>) { 
    my $line = $_; 
    chomp $line; 
    my @array = split /:\s+/, $line; 
    my $cuff = $array[0]; 
    my @introns = $array[1]; 
    $hash{$cuff} = [@introns]; 
} 
foreach my $cuff(keys %hash) { 
    print "$cuff:${hash{$cuff}}\n"; 
} 

close FILE; 

그러나 나는 다음과 같은 결과를 얻었다 :

나는 ARRAY (0x16a8b10) 문 또는 유사한 하나의 값을 시각화 할 수있는 방법
CUFF.61092  chr8:67968840-67969614:-:ARRAY(0x16a8b10) 
CUFF.30258  chr19:16636489-16638890:-:ARRAY(0x15f3b00) 
CUFF.47340  chr4:85719262-85722802:-:ARRAY(0x2ae38599de90) 

?

답변

0

: 뒤에 공백이 없으므로 $array[1]은 비어 있습니다. 또한 각 행에 대해 $hash{$cuff}을 덮어 쓰지 않으려면 push 기존 배열에 새 범위를 지정하려고합니다. @{ ... }배열 참조 취소이며 배열 참조를 참조하는 배열로 바꿉니다. 나는 코드로 만든

#!/usr/bin/perl 
use warnings; 
use strict; 

my $input_gtf = shift or die $!; 

my %hash; 

open my $FILE, $input_gtf or die $!; 
while (my $line = <$FILE>) { 
    chomp $line; 
    my @array = split /:/, $line; 
    my ($cuff, $introns) = @array; 
    push @{ $hash{$cuff} }, $introns; 
} 
close $FILE; 

for my $cuff (keys %hash) { 
    print join ':', $cuff, @{ $hash{$cuff} }; 
    print "\n"; 
} 

관련없는 변경 : 어휘 파일 핸들의

  • 사용

    여기에 스크립트의 내 버전입니다. 그들은 더 안전하고 쉽게 지나칠 수 있습니다.

  • 다른 변수에 저장하는 데에만 $_을 사용할 필요가 없습니다. 변수에 <>을 직접 할당 할 수 있습니다.
+0

대단히 감사합니다! 그것은 완벽하게 작동합니다! –