按数字和字母顺序对列表进行排序

按数字和字母顺序对列表进行排序

我试图找到按字母顺序排序的最常见单词。例如:

  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

相关内容