이런 파일이 있어요
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
옵션은 대소문자 차이를 무시합니다.