如何使用 bash 从文本文件创建词汇表?

如何使用 bash 从文本文件创建词汇表?

给定一个文本文件,我想输出文件中的单词及其频率。例如,如果文本文件包含“我真的很喜欢汉堡”,则输出应如下所示:

Burgers 1
I 1
Love 1
Really 2

答案1

测试文件:

$ cat filename.txt 
I really really   love burgers

cat filename.txt \
    | tr -s ' ' '\n' \
    | sort \
    | uniq -c \
    | sort -n -r \
    | awk '{ print $2 " " $1 }'

输出:

really 2
love 1
I 1
burgers 1

让我们分解所有这些并解释每个步骤。首先,文件由catto打印出来stdout

cat fileanme.txt

然后我们将输出传递给cat它,它将用换行符tr()替换所有空格( )。该选项压缩空格并将多个空格替换为一个。即使在单词之间有多个空格,这也会每行生成一个单词。' ''\n'-str'\n'

tr -s ' ' '\n'

我们传递给的单词列表sort。这将按字母顺序对单词进行排序。

sort

可以将排序的单词列表传递给uniq它将输出唯一的单词列表。uniq需要对列表进行排序。-c标志输出还在每个字之前进行计数。计数器在每行的开头保留了几个空格。这会产生对齐的单词。这些空格将在下一步中删除。

uniq -c

现在我们可以按计数器对单词进行排序。-n导致sort使用每行(计数器)中的第一个单词进行数字排序。-r选项反转结果(最高计数器优先)。

sort -n -r

最后awk,使用print,对于所有行,我们交换单词和计数器。多余的空格被免费清除(awk使用空格作为字段分隔符,折叠多个空格)。

对于每一行我们print

  • $2第二个字段(字)
  • " "- 单一空间
  • $1- 柜台
awk '{ print $2 " " $1 }'

相关内容