![uniq 유틸리티가 예상치 못한 결과를 제공하는 이유는 무엇입니까? [폐쇄]](https://linux55.com/image/107859/uniq%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%EA%B0%80%20%EC%98%88%EC%83%81%EC%B9%98%20%EB%AA%BB%ED%95%9C%20%EA%B2%B0%EA%B3%BC%EB%A5%BC%20%EC%A0%9C%EA%B3%B5%ED%95%98%EB%8A%94%20%EC%9D%B4%EC%9C%A0%EB%8A%94%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F%20%5B%ED%8F%90%EC%87%84%5D.png)
나는 디렉토리의 다양한 파일 유형을 인쇄하는 쉘스크립트를 작성 중입니다. 거의 작동하지만 이상한 이유로 출력에 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
더 적절할 것입니다(아마도 더 구체적인 전역 변수 또는 처리할 파일 목록을 사용하는 경우).