Unixシェル:逆方向のマルチレベルソート


0

最初の行にタグがあるプレーンテキストファイルでいっぱいのディレクトリがあり、タグとその頻度のリストを取得したいです。タグを抽出し、大きなリストに並べ替えました。このように見えるとしましょう:

apple
banana
banana
banana
banana
orange
orange
kumquat
pomegranate
pineapple
pineapple
pineapple

次に、パイプを使用してuniq -c、カウント付きのリストに変換します。

      1 apple
      4 banana
      2 orange
      1 kumquat
      1 pomegranate
      3 pineapple

私は今、逆の順序で番号で最初に、それをソートする(最大の番号が最初)、その後でみたい前方アルファベット順に。私はこれをパイピングすることを試みますsort -bnr(先頭の空白、数値ソート、逆順を無視します)が-r、文字部分にも適用されます:

      4 banana
      3 pineapple
      2 orange
      1 pomegranate
      1 kumquat
      1 apple

-k複数のフィールドで並べ替えるオプションについて考えましたが、先日学びましたが、異なる-kオプションに個別に反転を適用することはできないようです(おそらく、単に出力を出力するだけtacなのでしょうか?)。sort前の並べ替えを無視し、数値部分を再び混同するため、1秒をパイピングしても機能しません。

理想的には、ソリューションはまだとを使用sortuniqますが、必要に応じて別のツールに切り替えることもできます。ただし、これはスクリプトで終わる可能性があるため、対話型ツールを必要とするソリューションが出ています。

回答:


0

「関連する」サイドバーのアイテムをランダムに参照し始めたため、すでに答えが見つかりました。フィールド指定子の後にパラメータを使用して、そのフィールドのみに適用できることがわかります-私はマニュアルページのその部分を読みましたが、見逃していたので、非常に注意深く読んでいませんでした:

OPTSは1つ以上の1文字の順序オプション[bdfgiMhnRrV]であり、そのキーのグローバル順序オプションをオーバーライドします。キーが指定されていない場合は、行全体をキーとして使用します。

最終コマンド:

sort -bk 1rn -k 2
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.