2つのファイルの3つの列を比較したいのですが、3番目の列は-3から+3の範囲で、2つのファイルを結合できます。ファイル1
miR156a AT1G27360 1253
miR156a AT1G27370 2368
miR156a AT1G53160 586
ファイル2
miR156a AT1G27360 1252
miR156a AT1G27370 2367
miR156a AT1G53160 123
miR156a AT1G69170 1296
期待される出力は
miR156a AT1G27360 1253
miR156a AT1G27370 2368
miR156a AT1G53160 586
miR156a AT1G53160 123
miR156a AT1G69170 1296
交差点しか見つけられないが、2つのファイルの和集合を取得できないperlスクリプトを書いてみました
open(FH1, "$filename1");
open(FH2, "$filename2");
while ( $line1 = <FH1> ) {
chomp $line1;
@temp = split(/\s+/, $line1);
if ($#temp > 1) {
push(@miR_TP, $temp[0]);
push(@tar_TP, $temp[1]);
push(@start_TP, $temp[2]);
}
}
while ( $line2 = <FH2> ) {
chomp $line2;
@temp2 = split(/\s+/, $line2);
if($#temp > 1) {
push(@miR, $temp2[0]);
push(@tar, $temp2[1]);
push(@start, $temp2[2]);
}
}
for ($i=0 ; $i<=$#miR ; $i++) {
for($j=0 ; $j<=$#miR_TP ; $j++) {
if ( ($miR[$i] eq $miR_TP[$j]) &&
($tar[$i] eq $tar_TP[$j]) &&
(
($start[$i] eq $start_TP[$j]) ||
($start[$i] eq $start_TP[$j]+1) ||
($start[$i] eq $start_TP[$j]+2) ||
($start[$i] eq $start_TP[$j]+3) ||
($start[$i] eq $start_TP[$j]-1) ||
($start[$i] eq $start_TP[$j]-2) ||
($start[$i] eq $start_TP[$j]-3)
)) {
print "$miR[$i]\t$tar[$i]\t$start[$i]\n";
}
}
}
コードの変更を手伝ってください。