私はPerlの使用にかなり慣れていないので、ファイルのすべての行を比較するためにPerlを使用する必要があります。ファイルには、|で区切られた2つの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";
}
}
}
どんな助けでも大歓迎です!
よろしくお願いします、Gab