텍스트 파일에 있는 모든 단어와 그 발생 횟수를 개별적으로 계산하고 싶습니다.

텍스트 파일에 있는 모든 단어와 그 발생 횟수를 개별적으로 계산하고 싶습니다.

file.txt다음 내용이 포함된 파일이 있습니다 .

I am groot, groot me, me groot,I love groot, groot groot, am I groot groot so

모든 단어를 개별적으로 계산하고 싶습니다.

단어 세기에는 다음 명령을 사용합니다.

tr ' ' '\n' < file.txt | grep "groot" | wc -l

하지만 모든 단어를 세는 방법이 있는지 알고 싶습니다. 원하는 출력은 다음과 같습니다.

word        count
I           4
am          3
groot       8
me          2

bash 파일이나 bash 스크립트를 사용하여 수행할 수 있습니까? 도와주세요.

답변1

grep -o '\w\+' file.txt | sort | uniq -c

설명하다:

  • grep -o각 일치 항목은 별도의 줄에 출력됩니다.
  • \w\+연속된 영숫자 문자와 일치합니다 _.
  • uniq -c각 연속 실행에 대해 반복되는 행의 발생 횟수가 출력됩니다.
  • 각 고유 단어를 하나의 연속적인 반복 줄로 그룹화하려면 sortbefore가 필요합니다.uniq -c

답변2

표준 도구만 사용하십시오.

$ tr -sc '[:alpha:]' '\n' <file | sort | uniq -c
   3 I
   2 am
   8 groot
   1 love
   2 me
   1 so

단어가 아닌 각 문자를 개행 문자로 바꾸는 것부터 시작하세요. 우리는 단어가 아닌 문자를 "알파벳 문자가 아닌 모든 문자"로 정의합니다(이것은 명령줄에서 -c수행 [:alpha:]하는 작업 입니다). 두 개 이상의 연속 개행 결과 실행은 단일 개행으로 압축됩니다(이것은 명령줄에서 발생합니다).\ntr-str

그런 다음 생성된 단어(한 줄에 한 단어)가 정렬되고 sort각 단어의 발생 횟수가 계산됩니다.

sort | uniq -c단일 프로그램을 사용하면 파이프라인 부분을 약간 더 시간 효율적으로 만들 수 있습니다 awk.

$ tr -sc '[:alpha:]' '\n' <file | awk '{ count[$0]++ } END { for (word in count) print count[word], word }'
1 love
8 groot
2 am
3 I
1 so
2 me

코드 awk는 단순히 읽은 각 단어를 tr연관 배열의 키로 사용 count하고 해당 단어를 볼 때마다 연관된 값을 증가시킵니다. 마지막으로 코드는 모든 단어의 개수를 인쇄합니다.

관련 정보