对文件中的单词进行排序

对文件中的单词进行排序

我有一些我无法克服的问题。我需要计算文本文件中前 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进行排序是不必要的(尽管没有错)。

相关内容