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 实现吗?

一解

使用 xargs -n 1 将一行中多个字符拆分成多列,比如

abcd  ss kkk
fff xx k

// 拆分后

abcd
ss
kkk
fff
xx
k

使用 sort | uniq -c | sort -nr 进行去重并排序。

使用 awk '{print $2" "$1}' 交换出现次数和对应的字母,比如

123 a
20 b
10 c

// 交换后

a 123
b 20
c 10
cat words.txt | xargs -n 1 | sort | uniq -c | sort -nr | awk '{print $2" "$1}'