面试题答案
一键面试实现命令
awk '{count[$0]++} END {for (word in count) {print count[word], word}}' large_data.txt | sort -nr | head -n 10
简要思路
- 使用
awk
统计单词出现次数:awk '{count[$0]++} END {for (word in count) {print count[word], word}}' large_data.txt
这部分awk
命令,在逐行读取文件large_data.txt
时,使用关联数组count
统计每个单词出现的次数。在END
块中,遍历关联数组,输出每个单词的出现次数和单词本身。这种方式每次处理一行数据,不需要一次性将整个文件读入内存,有效减少内存占用。 - 使用
sort
进行排序:sort -nr
对awk
输出的结果进行排序,-n
表示按数字大小排序,-r
表示逆序,这样出现次数多的单词排在前面。 - 使用
head
获取前10个:head -n 10
从排序后的结果中取出前10行,即出现次数排名前10的单词及其出现次数。
这里未用到grep
,因为仅用awk
、sort
和head
即可高效完成任务。如果非要结合grep
,可在前面增加grep
筛选出符合特定模式的单词,如grep '^[a-zA-Z]+$' large_data.txt | awk '{count[$0]++} END {for (word in count) {print count[word], word}}' | sort -nr | head -n 10
,此例中grep '^[a-zA-Z]+$'
筛选出仅由字母组成的单词,再进行后续统计和排序等操作。