LeetCode: 192. Word Frequency
LeetCode: 192. Word Frequency
题目描述
Write a bash script to calculate the frequency of each word in a text file words.txt
.
For simplicity sake, you may assume:
words.txt
contains only lowercase characters and space ' '
characters.
Each word must consist of lowercase characters only.
Words are separated by one or more whitespace characters.
Example:
Assume that words.txt
has the following content:
the day is sunny the the
the sunny is is
Your script should output the following, sorted by descending frequency:
the 4
is 3
sunny 2
day 1
Note:
Don't worry about handling ties, it is guaranteed that each word's frequency count is unique.
Could you write it in one-line using Unix pipes?
解题思路
见代码。
AC 代码
# FYI:
# NF(awk): 字段数量
# -c, --count(uniq): 在每列旁边显示该行重复出现的次数
# -n, --numeric-sort(sort): compare according to string numerical value
# -r, --reverse(sort): reverse the result of comparisons
# 1. 获取单词列表
# 2. 对单词列表进行排序
# 3. 统计相同合并的单词
# 4. 根据单词列表出现次数排序
# 5. 调整输出顺序
awk '{for(i=1; i<= NF; ++i) print $i}' words.txt | sort | uniq -c | sort -nr | awk '{print$2, $1}'