我有一些我无法克服的问题。我需要计算文本文件中前 N 个单词。然后,我必须按降序打印它们,然后是出现的次数。单词必须按字母顺序排序。
举个例子,如果单词“”出现了 6 次A” , 5 个字“b”, 5 个字Cn 为 2,我将打印:
6
乙5
如果单词 "la" 出现 10 次,单词 "hi" 出现 5 次,"zzz" 出现 5 次,"arr" 出现 5 次,并且 n 为 3 ,我将打印:
拉10
到达 5
你好5
(故意省略 zzz)。
问题是我的脚本(如下)仅打印每个出现次数的一个单词。
tr [:space:] '\n' <$1| uniq -c|sort -rnuk1,1|awk '{print $2,$1}'|head -n
作为一项额外功能,我希望脚本能够搜索文件前 m 行中单词出现的次数。
答案1
第一个问题的答案是(如果有人感兴趣?)
tr [:space:] '\n' <$1| sort |uniq -c|sort -k1rn -k2n|awk '{print $2,$1}'|head -12
我还是不知道这部分该怎么做。
作为一项额外功能,我希望脚本能够搜索文件前 m 行中单词出现的次数。
答案2
你的使用tr
很聪明。但你需要sort
在使用之前uniq
,因为uniq
只查看相邻的行。所以我们有
cat file.txt | sort | uniq -c | sort -r | awk '{print $2, $1}' | head -n 10
另外,正如您所看到的,在这种情况下,使用-k
和-n
进行排序是不必要的(尽管没有错)。