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