명령줄을 사용하여 텍스트 파일에서 단어 발생 횟수를 계산하는 방법은 무엇입니까?

명령줄을 사용하여 텍스트 파일에서 단어 발생 횟수를 계산하는 방법은 무엇입니까?

한 줄만 있는 큰 JSON 파일이 있고 명령줄을 사용하여 파일에서 특정 단어의 발생 횟수를 계산하고 싶습니다. 어떻게 해야 하나요?

답변1

$ tr ' ' '\n' < FILE | grep WORD | wc -l

여기서 tr공백을 줄 바꿈으로 바꾸고 grepWORD와 일치하는 모든 결과 줄을 필터링하고 wc나머지 줄을 계산합니다.

wcgrep 옵션을 사용하여 섹션을 저장할 수도 있습니다 -c.

$ tr ' ' '\n' < FILE | grep -c WORD

-c옵션은 POSIX에 의해 정의됩니다.

단어 사이의 공백이 보장되지 않는 경우 대신 다른 문자(구분 기호)를 사용해야 합니다. 예를 들어 교체 tr부품은 다음과 같습니다.

tr '"' '\n'

또는

tr "'" '\n'

큰따옴표나 작은따옴표를 바꾸려는 경우. 물론 tr한 번에 여러 문자 바꾸기를 사용할 수도 있습니다(다양한 유형의 공백과 구두점을 생각해 보세요).

WORD를 계산해야 하지만 prefixWORD, WORDsuffix 또는 prefixWORDsuffix는 계산하지 않는 경우 줄 시작/끝 태그에 WORD 패턴을 묶을 수 있습니다.

grep -c '^WORD$'

우리의 맥락에서 이는 단어 시작/끝 태그와 동일합니다.

grep -c '\<WORD\>'

답변2

GNU grep을 사용하면 다음과 같은 효과를 얻을 수 있습니다.grep -o '\<WORD\>' | wc -l

-o각 줄의 일치하는 부분을 별도의 줄에 인쇄합니다.

\<단어의 시작을 확인하고 \>단어의 끝을 확인하므로(Perl의 와 유사 \b) 단어 중간에 문자열이 일치하지 않도록 합니다.

예를 들어,

$python -c '가져오기' | grep '\<a\>'
가지고 있어야 한다하나—그리고 바람직하게는하나- 뻔한 방법이군요.
네임스페이스는하나좋은 아이디어입니다. 더 많이 만들어 보겠습니다!
$python -c '가져오기' | grep -o '\<a\>'
하나
하나
하나
$python -c '이것을 가져오세요' | grep -o '\<a\>' |

답변3

불행하다작동하지 않습니다GNU와 함께 coreutils.

grep -o -c WORD file

귀하의 플랫폼에서 작동한다면 우아하고 상당히 직관적인 솔루션입니다.GNU 사람들은 아직도 생각하고 있습니다.

답변4

JSON 데이터의 키 또는 값에 있는 단어를 일치시키려는지 여부에 따라 데이터에서 키 또는 값만 추출하고 싶을 수도 있습니다. 그렇지 않으면 일부 단어가 키와 값으로 모두 표시되면 너무 많이 계산될 수 있습니다.

모든 키를 추출하려면:

jq -r '..|objects|keys[]' <file.json

이는 현재 사물이 객체인지 여부를 재귀적으로 테스트하고 객체인 경우 키를 추출합니다. 출력은 한 줄에 하나씩 키 목록이 됩니다.

모든 값을 추출하려면 다음을 수행하십시오.

jq -r '..|scalars' <file.json

이는 비슷한 방식으로 작동하지만 단계가 더 적습니다.

그런 다음 위의 내용을 출력으로 파이프하거나 grep -c 'PATTERN'(일부 패턴을 키 또는 값과 일치시키기 위해) 또는 grep -c -w -F 'WORD'(일치하기 위해)단어키 또는 값에서) 또는 grep -c -x -F 'WORD'(전체 키 또는 값과 일치) 또는 유사한 작업을 수행하여 계산을 수행합니다.

관련 정보