열 값을 교환할 수 있는 경우 첫 번째 중복 인스턴스 유지

열 값을 교환할 수 있는 경우 첫 번째 중복 인스턴스 유지

이전에 복제본의 첫 번째 인스턴스를 유지하는 것에 대해 질문했는데 제공된 솔루션이 지금까지 잘 작동하고 있습니다(참조첫 번째 중복 인스턴스 유지).

그러나 이제 C열과 D열의 값이 동일하지만 순서가 다를 수 있는 상황이 발생하여 하나만 유지하고 싶습니다(어느 순서든 괜찮습니다).

입력 예:

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 P9 3 C A 9 3 P버전이지만 그 중 하나만 유지하고 싶습니다. 추가되는 복잡성은 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

관련 정보