텍스트 파일에 있는 모든 단어의 단어 발생 횟수를 가져오고 인쇄물을 정렬합니다.

텍스트 파일에 있는 모든 단어의 단어 발생 횟수를 가져오고 인쇄물을 정렬합니다.

다음과 같이 텍스트 파일을 처리하고 모든 단어의 수를 세어 인쇄하는 명령이 있습니다.

user@box $˜ magic-command-i-forgot | with grep | and awk | sort ./textfile.txt
66: the
54: and
32: I
16: unix
12: bash
5:  internet
3:  sh
1: GNU/Linux

그래서 한 줄씩 검색하는 것이 아니라 단어 단위로 검색하고, 한 단어만 검색하는 것이 아닌 모든 단어를 검색합니다. 오래전에 인터넷 어딘가에서 찾았지만 찾을 수도 없고 기억할 수도 없습니다.

답변1

tr나는 대신 사용할 것이다:

echo "Lorem ipsum dolor sit sit amet et cetera." | tr '[:space:]' '[\n*]' | grep -v "^\s*$" | sort | uniq -c | sort -bnr
  • tr공백을 줄 바꿈으로 바꾸십시오.
  • grep -v "^\s*$"빈 줄 자르기
  • sort입력으로 준비됨uniq
  • uniq -c횟수 발생
  • sort -bnr공백을 무시하고 숫자를 역순으로 정렬합니다.

우와. 이것은 훌륭한 계산 명령임이 밝혀졌습니다모든 대사를 맹세해

찾다. -name "*.py" -exec cat {} \; tr '[:space:]' '[\n*]' | grep -v "^\s* $" | 정렬 | uniq-c | 정렬-bnr | grep 씨발

답변2

  1. 입력을 한 줄에 하나씩 단어로 나눕니다.
  2. 결과 단어(줄) 목록을 정렬합니다.
  3. 압착이 여러 번 발생합니다.
  4. 발생순으로 정렬합니다.

입력을 단어로 분할하려면 단어 구분 기호로 생각되는 모든 문자를 개행 문자로 바꾸세요.

<input_file \
tr -sc '[:alpha:]' '[\n*]' | # Add digits, -, ', ... if you consider
                             # them word constituents
sort |
uniq -c |
sort -nr

답변3

grep과 awk를 사용하지 않지만 이는 원하는 대로 작동하는 것 같습니다.

for w in `cat maxwell.txt`; do echo $w; done|sort|uniq -c
  2 a
  1 A
  1 an
  1 command
  1 considered
  1 domain-specific
  1 for
  1 interpreter,
  2 is
  1 language.
  1 line
  1 of

답변4

당신이 이런 일을 하고 있다고 생각하시나요?

$ perl -n -e 'foreach ${k} (split(/\s+/)){++$h{$k}};END{foreach $l (keys(%h)){print "$h{$l}: ${l}\n"}}' /path/to/your/file | sort -n -k 1

awk물론 똑같이 하셔도 됩니다 :)

관련 정보