我试图找到按字母顺序排序的最常见单词。例如:
2 went
2 wonder
2 wont
3 began
3 little
3 moment
3 rabbit
3 thing
3 till
4 alice
4 bottle
4 came
4 sure
4 window
输出应该是alice
(具有最高值并且是按字母顺序排列的第一个单词)。
我正在做sort -nr
,不知道下一步该做什么。
答案1
要按两个字段排序,您需要告诉 sort 它们是什么,以及如何对它们进行排序;例如:
sort -k1,1nr -k2b < input
按字段 1 ( -k1,1
) 以相反(降序)顺序进行数字排序;对于字段 1 相等的行,按该行的其余部分 ( -k2
) 进行二次排序,通常(按词法)不包括排序键 ( b
) 中的前导空格(第一个字段和第二个字段之间的间距)。示例输入的输出是:
4 alice
4 bottle
4 came
4 sure
4 window
3 began
3 little
3 moment
3 rabbit
3 thing
3 till
2 went
2 wonder
2 wont
答案2
尽管杰夫已经仅使用回答了您的问题sort
,但我想无论如何我都会发布我的方法。我不知道sort
按两个字段排序的能力,因此我仅将其用于对输入进行“预”排序。由于每个部分中的单词都是按 ZA 排序的,因此我们只需颠倒它们的顺序即可。为此,我正在使用awk
:
sort -r file | awk '{if($1==x){var=$0"\n"var} else{print var;var=$0;x=$1}} END{print var}' | grep -v ^$
的作用只是删除 的输出grep -v ^$
的第一行,该行是空的。awk