获取文本文件中所有单词的单词出现次数并排序打印输出

获取文本文件中所有单词的单词出现次数并排序打印输出

我有一个命令可以处理一个文本文件,计算所有出现的单词并将其打印出来,如下所示:

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 个单词。我很久以前在互联网上的某个地方找到过它,但我找不到或不记得它。

答案1

我会用tr而不是awk:

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 '[:空格:]' '[\n*]' | grep -v "^\s*$" | 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当然你也可以做同样的事情:)

相关内容