写一个 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}'