텍스트 파일이 주어지면 파일에 있는 단어와 해당 빈도를 출력하고 싶습니다. 예를 들어 텍스트 파일에 "I really likeburgers"가 포함되어 있으면 출력은 다음과 같아야 합니다.
Burgers 1
I 1
Love 1
Really 2
답변1
테스트 파일:
$ cat filename.txt
I really really love burgers
cat filename.txt \
| tr -s ' ' '\n' \
| sort \
| uniq -c \
| sort -n -r \
| awk '{ print $2 " " $1 }'
산출:
really 2
love 1
I 1
burgers 1
모든 것을 분해하고 각 단계를 설명하겠습니다. 먼저 파일은 cat
에 의해 인쇄됩니다 stdout
.
cat fileanme.txt
그런 다음 출력을 전달하면 모든 공백( )이 줄 바꿈( )으로 대체 cat
됩니다 . tr
이 옵션은 공백을 압축하고 여러 공백을 하나로 바꿉니다. 단어 사이에 공백이 여러 개 있더라도 한 줄에 하나의 단어가 생성됩니다.' '
'\n'
-s
tr
'\n'
tr -s ' ' '\n'
우리가 전달하는 단어 목록입니다 sort
. 그러면 단어가 알파벳순으로 정렬됩니다.
sort
정렬된 단어 목록을 전달하면 uniq
고유한 단어 목록이 출력됩니다. uniq
목록을 정렬해야 합니다. -c
플래그 출력은 각 단어 이전에도 계산됩니다. 카운터는 각 줄의 시작 부분에 몇 개의 공간을 예약합니다. 이렇게 하면 정렬된 단어가 생성됩니다. 이러한 공백은 다음 단계에서 제거됩니다.
uniq -c
이제 카운터별로 단어를 정렬할 수 있습니다. 각 행(카운터)의 첫 번째 단어를 사용하여 숫자로 정렬 -n
됩니다 . 결과를 반전시키는 옵션(가장 높은 카운터부터).sort
-r
sort -n -r
마지막으로 awk
를 사용하여 print
모든 줄에 대해 단어와 카운터를 교환합니다. 불필요한 공백은 무료로 정리됩니다( awk
공백을 필드 구분 기호로 사용하고 여러 공백을 축소함).
각 행에 대해 다음을 수행합니다 print
.
$2
두 번째 필드(워드)" "
- 단일 공간$1
- 카운터
awk '{ print $2 " " $1 }'