누구든지 도움을받을 수 있습니까, 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 번호가 포함 해시를 만든 내가 생각
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";
}
: 여기
ENSG00000251791 SCARNA6 2.5
ENSG00000238862 SNORD19B 6.3
를 코드입니다 나는 ID 번호와 이름을 선택하는 정규 표현식을 작성하여 과도하게 복잡하게 만들었으므로 더 간단하고 효율적인 방법이 있다면 위대 할 것입니다.
있습니다 어떤 캡처 그룹은 ... – fugu
죄송합니다, 나는 당신이 제발 설명 할 수있는, 펄 매우 새로 온 사람? – user1879573
'$ gene_exp1 {$ _}'및'$ gene_exp2 {$ _} '는 어디에서 왔습니까? – Toto