uniq 유틸리티가 예상치 못한 결과를 제공하는 이유는 무엇입니까? [폐쇄]

uniq 유틸리티가 예상치 못한 결과를 제공하는 이유는 무엇입니까? [폐쇄]

나는 디렉토리의 다양한 파일 유형을 인쇄하는 쉘스크립트를 작성 중입니다. 거의 작동하지만 이상한 이유로 출력에 uniq를 사용하려고 하면 작동하지 않습니다. 이것은 내 입력(및 값 $FILE_TYPE) 입니다.

POSIX shell script, ASCII text executable
ASCII text
Bourne-Again shell script, ASCII text executable
UTF-8 Unicode text, with overstriking
Bourne-Again shell script, ASCII text executable

하지만 내가 사용할 때

FILE_TYPE_COUNT=`echo "$FILE_TYPE" | sort | uniq -c`

이것이 인쇄되는 것입니다

  1 POSIX shell script, ASCII text executable
  1 ASCII text
  1 Bourne-Again shell script, ASCII text executable
  1 UTF-8 Unicode text, with overstriking
  1 Bourne-Again shell script, ASCII text executable

당연히 그래야지

  1 POSIX shell script, ASCII text executable
  1 ASCII text
  2 Bourne-Again shell script, ASCII text executable
  1 UTF-8 Unicode text, with overstriking

내가 뭘 잘못하고 있는지 아시나요?

답변1

파일을 필터링하기 전에 파일을 정렬하지 않습니다. ~에서맨페이지:

참고: uniq중복 행은 인접하지 않으면 감지되지 않습니다. 입력을 먼저 정렬 sort -u하거나 uniq. 또한 비교는 지정된 규칙을 따릅니다 LC_COLLATE.

당신은 또한 처리해야모두한 번에 계산하려는 행 수입니다. 현재는 한 번에 하나의 파일 형식을 처리하므로 uniq -c각 파일 형식 중 하나가 있다는 것을 정확하게 알려줍니다. 즉, 한 번에 하나의 파일 형식만 볼 수 있습니다.

file * | sort | uniq -c

더 적절할 것입니다(아마도 더 구체적인 전역 변수 또는 처리할 파일 목록을 사용하는 경우).

관련 정보