대소문자를 구분하지 않고 각 줄이 반복되는 횟수를 계산합니다.

대소문자를 구분하지 않고 각 줄이 반복되는 횟수를 계산합니다.

이런 파일이 있어요

a
A
b
c

대소문자를 구분하지 않고 각 줄이 반복되는 횟수를 인쇄하고 싶습니다. 다음 명령이 유용하다고 생각했습니다.

tr A-Z a-z | uniq -c | sed -e 's/^ *//' -e 's/ *$//'

그러나 파일 형식이 A \n a. 2 a그러나 예상되는 결과는 다음 과 같습니다.2 A

어떻게 해야 하나요?

답변1

sort먼저 명령을 사용하기 전에 먼저 사용해야 합니다 . uniq -c입력과 같이 다른 문자 뒤에 또 다른 반복 문자가 있으면 명령이 실패하기 때문입니다.

a
A
b
c
A
a
a

두 번째 문제는 모든 대문자를 소문자로 변환하여 결과가 소문자로 바뀌기 때문에 잘못된 결과가 나온다는 것입니다.

's/ *$//'또한 출력에 후행 공백이 없으므로 sed 부분이 필요하지 않습니다 .

다음과 같이 수정된 명령을 사용해 보세요.

tr a-z A-Z <file |sort | uniq -c | sed 's/^ *//'

또는 더 짧은 시도:

sort -r file |uniq -ci

sort해당 -r옵션은 대문자를 첫 번째 줄로 정렬합니다. with uniq및 해당 -i옵션은 대소문자 차이를 무시합니다.

관련 정보