【发布时间】:2017-04-19 04:11:41
【问题描述】:
我想创建具有来自文件 1 和文件 2 的值的输出文件。
文件 1 中的行:
chr1 袖扣外显子 708356 708487 1000 - .
基因ID“CUFF.3”;成绩单ID“CUFF.3.1”;外显子编号“5”; FPKM “3.1300591420”; frac "1.000000"; conf_lo "2.502470"; conf_hi “3.757648”;科夫“7.589085”; chr1袖扣外显子 708356 708487 。 - 。基因ID“XLOC_001284”;成绩单_id “TCNS_00007667”;外显子编号“7”;基因名称“LOC100288069”; oId “袖带.15.2”;最近的_ref "NR_033908";类代码“j”; tss_id "TSS2981";
文件 2 中的行:
袖带.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 行。
我该如何解决这个问题?
谢谢!
【问题讨论】:
-
我为您的困惑道歉。错误是指带有 print 语句的行: print $id 。 "\t" 。 $uniq 。 "\t" 。 $xloc_hash{$id} 。 "\t" 。 $fpkm_hash{$id} 。 "\n";
-
嗯,其中一个值未初始化。哪一个?可能你输入的数据不一致。