我遇到了一件简单的事情。我需要比较两个文件并只写入两者之间不匹配的模式。
我的第一个文件如下所示:
1 A A
2 A B
3 C D
4 E F
5 G H
6 I L
我的第二个文件如下所示:
A A
A B
C D
我想要的是使用第二个文件中的对列表来选择第一个文件中不匹配的行并将它们打印在输出中。我想要的输出如下所示:
4 E F
5 G H
6 I L
我下面的代码需要改进,我需要你的帮助来做到这一点!
open (FUS, "< $file_1")|| die "Impossible open file 1";
@f = <FUS>;
close (FUS);
open (ALL, "< $file_2")|| die "Impossible open file 2";
@a = <ALL>;
close (ALL);
for ($c=0; $c<=$#a; $c++) {
chomp ($a[$c]);
@q = split (/\t/, $a[$c]);
$qok = $q[0]."\t".$q[1];
$qko = $q[1]."\t".$q[0];
for ($t=0; $t<=$#f; $t++) {
chomp ($f[$t]);
($id, $pf1, $pf2) = split (/\t/, $f[$t]);
$pf_12 = $pf1."\t".$pf2;
$pf_21 = $pf2."\t".$pf1;
if ((($qok ne $pf_12) && ($qko ne $pf_12)) || (($qok ne $pf_21) && ($ko ne $pf_21))){
print "$id\t$pf1\t$pf2\n";
}
}
}
这段代码的问题在于循环中的某些东西,这使我获得了错误的结果,而不是想要的结果。
非常欢迎任何建议!