任何人都可以提供幫助,我的Perl腳本有問題。我想將3列數據輸入文件推入數組,選擇ID號和名稱,使用ID作爲鍵和值作爲值聲明散列,然後運行if-else條件語句以選擇鍵 - 值對大於2.將數據推入數組的問題,在Perl中聲明哈希和條件語句
下面是input.txt
數據文件的示例,其中column 1 is ID number, column 2 is ID name and column 3 value associated with columns 1 and 2
。
ENSG00000251791 SCARNA6 2.5
ENSG00000238862 SNORD19B 6.3
ENSG00000238527 SN-112 -3
ENSG00000222373 RNY.5P5 1.3
我可以得到的第一部分數據推入到一個數組,但我不能其餘的工作。我已經創建了一個包含ID號兩個散列:值和ID名稱:值對,因爲我想在輸出文件中兩列:
ENSG00000251791 SCARNA6 2.5
ENSG00000238862 SNORD19B 6.3
下面的代碼:
use strict;
use warnings;
my $input = 'input.txt';
my @input_vars;
open my $input_file_handle, '<', $input or die $!;
while (<$input_file_handle>) {
chomp $_;
push @input_vars, $_;
}
close $input_file_handle;
# regex to select ID name, ID number and value
my %id;
foreach (@input_vars) {
my $regex = '/\w+\s[\w-]+\s\d+\.\d+/';
while ($_ =~ m/$regex/g) {
my $id1{$1} = $3;
my $id2{$2} = $3;
}
}
foreach (@input_vars) {
print "$_ ";
if ($id1{$_} >= 2) {
print "$id1{$_}";
} else {
print "N/A";
}
if ($id2{$_} >= 2) {
print "$id2{$_}";
} else {
print "N/A";
print "n";
}
我想我通過創建一個正則表達式來選擇ID號和名稱,從而使它過於複雜,所以如果有一種更簡單,更有效的方法,那將會很棒。
,我們在您的正則表達式沒有捕捉組... – fugu
對不起,我很新的Perl中,你能解釋一下嗎? – user1879573
哪裏有'$ gene_exp1 {$ _}'和'$ gene_exp2 {$ _}'來自哪裏? – Toto