cat file.txt | sort -u와 cat file.txt 고유의 차이점 |

cat file.txt | sort -u와 cat file.txt 고유의 차이점 |

sort -u와 uniq의 차이점을 알고 싶습니다. 아래 명령을 사용하여 파일의 고유 문자열 수를 얻으려고 시도했으며, sort -u 및 uniq는 내 지식에 동일한 출력을 제공합니다. 이것이 두 가지 다른 카운트를 제공하는 이유입니다.

cat test.txt | sort -u | wc -l 
351
cat test.txt | uniq | wc -l
370

두 개의 다른 행 번호가 표시되는 이유는 무엇입니까?

답변1

엄밀히 말하면 uniq입력을 정렬할 필요는 없지만 uniq연속된 중복 행만 제거합니다.

차이점은 다음과 같습니다.

  • sort파일을 정렬하고 (해당 -u옵션을 사용하여) 정렬 후 연속된 중복 줄도 제거합니다.

  • uniq연속된 중복 행을 제거합니다. 또한 중복된 행만 출력하는 옵션도 있습니다(하나각각 -d, 또는모두cheat -D) 입력()에 줄이 나타나는 횟수를 출력할 수 있습니다 -c. 또한 필드를 건너뛰고 한 줄에서 N 문자만 비교하는 등 중복 검색 방법을 제어하는 ​​다른 옵션도 있습니다.

  • sort물론, uniq두 기능을 결합하려는 경우 입력 출력을 파이프할 수 있습니다.

sort -u입력 파일의 순서를 유지하는 데 관심이 없거나 실제로 정렬하고 싶지만 출력에서 ​​중복을 원하지 않을 때 유용합니다.

uniq이는 입력 순서를 유지해야 할 때 또는 이미 정렬된 파일을 다시 정렬하여 CPU 및 IOPS를 낭비하지 않고 단일화하려는 경우 또는 연속된 단락을 제거하려는 경우와 같이 연속 반복에만 관심이 있는 경우에 유용합니다. 사이에 줄 바꿈(예: pdftotext줄이나 단락 사이에 많은 공백이 생성되는 경우가 많습니다. uniq읽기나 편집을 더 쉽게 만들기 위해 초과 부분을 제거할 수 있습니다).

답변2

uniq입력을 정렬해야 합니다. 순서에 어긋나는 중복 항목은 제거되지 않습니다.

~ printf %s\\n 1 2 1 | uniq
1
2
1
~ printf %s\\n 1 2 1 | sort | uniq
1
2
~ printf %s\\n 1 2 1 | sort -u
1
2

관련 정보