列値を交換できる場合は、最初の重複インスタンスを保持

列値を交換できる場合は、最初の重複インスタンスを保持

以前はレプリカの最初のインスタンスを維持することについて質問しましたが、提供されたソリューションはこれまでうまく機能しています(参照)最初の冗長インスタンスを保持)。

ただし、C列とD列の値は同じですが、順序が異なる可能性がある状況が発生し、1つだけ維持したいと思います(どの順序でも大丈夫です)。

入力例:

A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
9 3 C A 9 3 P
4 8 C T 7 4 P
9 3 T G 9 3 P

希望の出力:

A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P

使用:(sort -k3,4 -k5,5r -k1,1r file | sort -k1,1 -k3,4 -u | sort -k1,1rまたは同様の)メンテナンスと9 3 A C 9 3 Pバージョン9 3 C A 9 3 Pですが、そのうちの1つだけを維持したいと思います。追加される複雑さは、列Aの値が列Cと列Dに対して許容される複数の値(たとえば、上記の出力例の2行9 3 A C 9 3 Pと5行9 3 T G 9 3 P)を持つ可能性があるため、列のみで重複項目を取得することは不可能です。 。 ㅏ。

ありがとうございます!

答え1

awk '{
    key1 = $1 FS $2 FS $5 FS $5 FS $7
    if ( ((key1 SUBSEP $3 FS $4) in seen) || ((key1 SUBSEP $4 FS $3) in seen) )
        next
    seen[key1, $3 FS $4] = 1
    print
}'
A B C D E F G
1 2 T TACA 3 2 Q
9 3 A C 9 3 P
8 3 I R 8 2 Q
4 8 C T 7 4 P
9 3 T G 9 3 P

関連情報