リストを数字とアルファベット順に並べ替える

リストを数字とアルファベット順に並べ替える

最も一般的な単語をアルファベット順に並べ替えて見つけようとします。たとえば、

  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

2つのフィールドに基づいてソートするには、そのフィールドが何であるか、ソート方法を教えてください。たとえば、次のようになります。

sort -k1,1nr -k2b < input

フィールド 1( ) に基づいて-k1,1数字に基づいてフィールド 1 が同じ行の場合、-k2行の残りの部分 ( ) に基づいて 2 回ソートします。通常、bソートキー()の先行スペース(語彙的)を除外します。最初と2番目のフィールド)。入力例の出力は次のとおりです。

  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

Jeffは私を使ってあなたの質問に答えましたが、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

関連情報