テキストファイルから重複/逆一致のペアを削除したいと思います。
たとえば、ファイルには次のデータが含まれています。
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
フィールド区切り文字を、オプションの先頭または末尾のスペースを含むパイプ文字に設定します。次に、連想配列キーとして任意の順序で「ペア」を探します。見つかった場合はその行をスキップし、そうでない場合はキーが配列に追加され、その行が印刷されます。