逆マッチングペアを削除する方法は?

逆マッチングペアを削除する方法は?

テキストファイルから重複/逆一致のペアを削除したいと思います。

たとえば、ファイルには次のデータが含まれています。

10 |Name1 |20 |Name2
20 |Name2 |30 |Name3
20 |Name2 |10 |Name1   <-- Inverse pair (compared to first line) to be removed from text file
40 |Name4 |30 |Name3

私は次の結果を期待しています:

10 |Name1 |20 |Name2
20 |Name2 |30 |Name3
40 |Name4 |30 |Name3

ベストアンサー1

awkを使用してください:

awk -F '[[:blank:]]*[|][[:blank:]]*' -v SUBSEP='|' '
    ($1,$2,$3,$4) in seen || ($3,$4,$1,$2) in seen {next} 
    {seen[$1,$2,$3,$4]; print}
' file

フィールド区切り文字を、オプションの先頭または末尾のスペースを含むパイプ文字に設定します。次に、連想配列キーとして任意の順序で「ペア」を探します。見つかった場合はその行をスキップし、そうでない場合はキーが配列に追加され、その行が印刷されます。

おすすめ記事