나는 디렉토리의 다양한 파일 유형을 인쇄하는 쉘스크립트를 작성 중입니다. 거의 작동하지만 이상한 이유로 출력에 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
더 적절할 것입니다(아마도 더 구체적인 전역 변수 또는 처리할 파일 목록을 사용하는 경우).