我想創建一個從文件1有值輸出文件和文件1文件2打印與哈希值從不同的文件
行:
CHR1袖釦外顯子708356 708487 1000 - 。
gene_id「CUFF.3」; transcript_id「CUFF.3.1」;外顯子編號「5」; FPKM 「3.1300591420」;壓裂「1.000000」; conf_lo「2.502470」; conf_hi 「3.757648」; cov「7.589085」; chr1Cufflinks外顯子708356 708487。 - 。 gene_id「XLOC_001284」; transcript_id 「TCONS_00007667」;外顯子編號「7」; gene_name「LOC100288069」; oId 「CUFF.15.2」; nearest_ref「NR_033908」; class_code「j」; tss_id 「TSS2981」;
從文件2中的線:
CUFF.48557
CHR4:160253850-160259462:160259621-160260265:160260507-160262715
從該文件中的第二列是唯一id(uniq_id)。
我想在下面的格式輸出文件: transcript_id(CUFF_id)uniq_id gene_id(XLOC_ID)FPKM
我的腳本需要XLOC_ID和FPKM值從第一個文件,並從第二有兩列一起打印出來文件。
#!/usr/bin/perl -w
use strict;
my $v_merge_gtf = shift @ARGV or die $!;
my $unique_gtf = shift @ARGV or die $!;
my %fpkm_hash;
my %xloc_hash;
open (FILE, "$v_merge_gtf") or die $!;
while (<FILE>) {
my $line = $_;
chomp $line;
if ($line =~ /[a-z]/) {
my @array = split("\t", $line);
if ($array[2] eq 'exon') {
my $id = $array[8];
if ($id =~ /transcript_id \"(CUFF\S+)/) {
$id = $1;
$id =~ s/\"//g;
$id =~ s/;//;
}
my $fpkm = $array[8];
if ($fpkm =~ /FPKM \"(\S+)/) {
$fpkm = $1;
$fpkm =~ s/\"//g;
$fpkm =~ s/;//;
}
my $xloc = $array[17];
if ($xloc =~ /gene_id \"(XLOC\S+)/) {
$xloc = $1;
$xloc =~ s/\"//g;
$xloc =~ s/;//;
}
$fpkm_hash{$id} = $fpkm;
$xloc_hash{$id} = $xloc;
}
}
}
close FILE;
open (FILE, "$unique_gtf") or die $!;
while (<FILE>) {
my $line = $_;
chomp $line;
if ($line =~ /[a-z]/) {
my @array = split("\t", $line);
my $id = $array[0];
my $uniq = $array[1];
print $id . "\t" . $uniq . "\t" . $xloc_hash{$id} . "\t" . $fpkm_hash{$id} . "\n";
}
}
close FILE;
我初始化哈希的文件之外,但我得到了下面的錯誤每個袖口值:
CUFF.24093
chr17:3533641-3539345:3527526-3533498:3526786-3527341 :(。)3524707-3526632未初始化值的在串聯或串在ex_1.pl 線55,線9343.
使用使用級聯(。)中的未初始化值或ex_1.pl處的字符串 第55行,9343行。
如何解決此問題?
謝謝!
66是哪裏? – simbabque
我對此感到抱歉。 錯誤是指打印聲明行: print $ id。 「\ t」。 $ uniq。 「\ t」。 $ xloc_hash {$ id}。 「\ t」。 $ fpkm_hash {$ id}。 「\ n」 個; –
那麼,其中一個值是未初始化的。哪一個?也許你的輸入數據不一致。 – simbabque