私の目的は、3 つのファイルにある ID ペアを比較することです。各 ID ペアは値に関連付けられています。2 つのファイルで同じ ID ペアを見つけた場合は、関連する値を複製し、ID ペアと最終スコアを出力します。ID ペアが 3 つのファイルすべてにある場合は、同じことが必要です。それ以外の場合 (「単一の ID ペア」の場合、1 つのファイルでのみ見つかります)、ID ペアと値を出力したいと思います。特定のポイントは、各ペアの ID の順序に関連しています。各ペアの ID の順序はファイルごとに異なる可能性があるため、ID ペアを比較する際にはこの点に留意する必要があります。私のファイルは次のようになります。
ros.txt
a|b 1
d|c 2
f|t 3
g|i 4
exp.txt
a|b 1
c|d 2
e|f 3
g|h 4
phy.txt
b|a 1
d|c 2
f|e 3
g|p 4
これまでに行ったことは次のとおりです。
#!/usr/bin/perl
use warnings;
use strict;
my %rosetta;
open (my $ROS, '<', 'ros.txt') or die "$!";
while (<$ROS>) {
my ($tmp_r,$vr)=split/\t/;
next if $vr =~/NA/;
my ($r1,$r2)=split/\|/,$tmp_r;
next if $r1 eq $r2;
my %expression;
open (my $EX, '<', 'exp.txt') or die "$!";
while (<$EX>) {
my ($tmp_e,$ve)=split/ /;
next if $ve =~/NA/;
my ($e1,$e2)=split/\|/,$tmp_e;
next if $e1 eq $e2;
my %phyloge;
open (my $PHY, '<', 'phy.txt') or die "$!"_;
while (<$PHY>) {
my ($tmp_p,$vp)=split/ /;
next if $vp =~/NA/;
my($p1,$p2)=split/\|/,$tmp_p;
next if $p1 eq $p2;
}
}
}
この時点で先に進むことができず、問題を解決するための提案が必要です。私の望ましい出力は次のとおりです。
a|b 1
c|d 8
f|t 3
e|f 9
g|h 4
g|i 4
g|p 4
助けを待っています!前もって感謝します