다음과 같이 텍스트 파일을 처리하고 모든 단어의 수를 세어 인쇄하는 명령이 있습니다.
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
- 입력을 한 줄에 하나씩 단어로 나눕니다.
- 결과 단어(줄) 목록을 정렬합니다.
- 압착이 여러 번 발생합니다.
- 발생순으로 정렬합니다.
입력을 단어로 분할하려면 단어 구분 기호로 생각되는 모든 문자를 개행 문자로 바꾸세요.
<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
물론 똑같이 하셔도 됩니다 :)