순서가 지정되지 않은 중복 값이 ​​있는 행 제거

순서가 지정되지 않은 중복 값이 ​​있는 행 제거

숫자 1, 2, 3 쌍이 포함된 파일이 있습니다.

입력 예:

2 1
3 1
1 2
3 2
1 3
2 3

내가 하고 싶은 일은 중복된 값이 있지만 순서가 맞지 않는 행 중 하나를 제거하는 것입니다.

출력 예:

2 1
3 1
3 2

예를 들어, 2 1은 1 2와 동일하므로 행 중 하나를 삭제하십시오.

숫자를 쉽게 짝지을 수 있기 때문에 작은 예를 제공했다는 점에 유의하겠습니다. 4개 이상의 숫자를 쌍으로 조합한 파일로 확장하고 싶습니다. 진행 방법을 모르겠습니다. 모든 인터넷 검색에서 중복 행 또는 중복 열이 발생합니다. 이 질문/제목을 개선하는 방법을 알려주십시오. 미리 감사드립니다!

답변1

내가 원하는 것을 달성하는 가장 좋은 방법은 행의 숫자를 정렬한 다음 중복 항목을 제거하는 것입니다(@alecxs의 의견에서 제안한 대로). 이것해결책예:

awk '$1>$2{$0=$2 OFS $1} 1' example.txt | sort -u

어디:

$1>$2{$0=$2 OFS $1} sorts each line. sort -u removes duplicate lines.

답변2

또 다른 접근 방식은 배열을 사용하여 "표시된" 숫자 쌍을 추적하는 것입니다.

awk '!a[$1 < $2? $1 FS $2: $2 FS $1]++' file
2 1
3 1
3 2

답변3

예를 들어:

~$ cat 1.txt                                                                                                                                                                                   
2 1
3 1
1 2
3 2
1 3
2 3
~$ cat 1.txt| sort -nk1                                                                                                                                                                        
1 2
1 3
2 1
2 3
3 1
3 2

존재하다sort -nk1

"n" - 숫자 정렬용

"k1" - 첫 번째 열을 기준으로 정렬하는 데 사용됩니다.

관련 정보