192. 统计词频 - 力扣(LeetCode)
写一个 bash 脚本以统计一个文本文件 words.txt
中每个单词出现的
频率
。
为了简单起见,你可以假设:
words.txt
只包括小写字母和' '
。- 每个单词只由小写字母组成。
- 单词间由一个或多个空格字符分隔。
示例:
假设 words.txt
内容如下:
the day is sunny the the the sunny is is
你的脚本应当输出(以词频降序排列):
the 4 is 3 sunny 2 day 1
说明:
- 不要担心词频相同的单词的排序问题,每个单词出现的频率都是唯一的。
- 你可以使用一行 Unix pipes 实现吗?
cat words.txt | xargs -n 1 | sort | uniq -c | sort -nr | awk '{print $2" "$1}'
-
cat words.txt
:- 这个命令读取
words.txt
文件的内容并将其输出到标准输出。
- 这个命令读取
-
| xargs -n 1
:|
是管道符,将前一个命令的输出传递给下一个命令。xargs -n 1
将输入的每一行(或每个单词)作为参数传递给后续命令。-n 1
表示每次只处理一个参数。
-
| sort
:- 将传递过来的单词进行排序。排序是为了后续的去重操作能够正确统计相同单词的出现次数。
-
| uniq -c
:uniq
命令用于去除重复的行。-c
选项会在输出中添加每个唯一行的出现次数,即统计每个单词的出现次数。
-
| sort -nr
:- 这个命令对统计结果进行排序。
-n
表示按数值排序,-r
表示以降序排列。这样可以将出现次数最多的单词排在前面。
- 这个命令对统计结果进行排序。
-
| awk '{print \$2" "\$1}'
:awk
是一个文本处理工具,这里用于格式化输出。\$1
表示行的第一个字段(出现次数),\$2
表示第二个字段(单词)。因此,这条命令将输出格式化为“单词 出现次数”。