我对使用 Perl 很陌生,我需要用它来比较文件的所有行。该文件有两个由 | 分隔的 ID。以及每个 ID 对的值。它看起来像这样:
a|b 9
a|a 1
a|c 4
s|c 3
f|e NA
a|d 2
d|a 2
d|b 5
c|l NA
c|s 3
如果有另一行具有相同的 ID(字母),但顺序相反(如 a|d 和 d|a),我想删除一行,其中我将“NA”作为值的行和具有两个位置的 ID 相同(如 a|a 1)。从这里的示例中,我想获得这样的输出:
a|b 9
a|c 4
s|c 3
a|d 2
d|b 5
我正在尝试我编写的代码。它能够消除具有“NA”的行和 ID 相同的行(如 a|a 1),但无法检测到具有倒置 ID 的行。
$file = "test.txt";
open (HAN, "$file") || die "No input file";
@r = <HAN>;
close (HAN);
for ($i=0; $i<=$#r; $i++) {
chomp($r[$i]);
($id, $v) = split (/\t/, $r[$i]);
if ( $v ne NA ) {
($id1, $id2) = split (/\|/, $id);
$ii = $id1."|".$id2;
$dd = $id2."|".$id1;
if(($id1 ne $id2)||($ii ne $dd)){
print "$id\t$v\n";
}
}
}
绝对欢迎任何帮助!
提前谢谢你,加布