以下を明確に説明してください。
いくつかのキーワードと使用頻度があるとしましょう。
12 Hi
7 Hash
7 C++
9 Superuser
17 Stackoverflow
9 LaTeX
42 Life
9 Ubuntu
私が望むのは、このデータを頻度に基づいて降順に並べ替え、同じ値がある場合は2番目の列を昇順に使用することです。
sort -n -r foo.txt
最初の部分と2番目の列も次のようになりますreversed
。
42 Life
17 Stackoverflow
12 Hi
9 Ubuntu
9 Superuser
9 LaTeX
7 Hash
7 C++
次の結果をどのように取得できますか?
42 Life
17 Stackoverflow
12 Hi
9 LaTeX
9 Superuser
9 Ubuntu
7 C++
7 Hash
引数を使うべきだと思いますが、-k
どうすればいいかわかりません!
sort
コマンドのみを使用してこれを行う方法を知りたいですbash
。ただし、これだけでは達成できない場合は、sort
他のコマンドがBourneシェルと互換性があるはずです。
ベストアンサー1
条件を使用してソートキーを個別に指定します。
sort -k1,1nr -k2,2 inputfile
これは、最初のキーが数値に従って逆順に並べられ、2番目のキーが次のようにソートされることを指定します。基本種類。
から引用POSIX ソート:
-K キー定義
これキー定義パラメーターは、制限付きソートキーフィールド定義です。この定義の形式は次のとおりです。
フィールドスタート[タイプ][、フィールドの終わり[タイプ]]
どこフィールドスタートそしてフィールドの終わり行の一部に制限されるキーフィールドを定義します(拡張説明セクションを参照)。型は文字リスト 'b'、 'd'、 'f'、 'i'、 'n'、 'で修飾子の川になります。 'b'修飾子は
-b
オプションのように動作するはずですが、フィールドスタートまたはフィールドの終わりついているのです。他の修飾子はそのオプションのように機能する必要がありますが、指定されている場合は関連付けられたキーフィールドにのみ適用され、この効果が必要です。フィールドスタート、フィールドの終わり、または両方。修飾子が追加された場合フィールドスタートまたはフィールドの終わり、どのオプションも適用されません。実装では、このオプションが少なくとも9回発生するようにサポートする必要があり、-k
これはコマンドラインの順序で重要です。オプションを指定しない場合は、行全体に-k
デフォルトのソートキーを使用する必要があります。複数のキーフィールドがある場合は、前のキーがすべて同じであると比較された後にのみ、後のキーが比較されます。このオプションが指定されていない場合、等価を比較する行は、、、または
-u
オプションがないかのように並べ替えて(指定されている場合はまだ有効です)、行のすべてのバイトを比較する必要があります。行が等しいか比較される順序は、未指定の順序で記録されます。-d
-f
-i
-n
-k
-r
これで以下が生成されます。
42 Life
17 Stackoverflow
12 Hi
9 LaTeX
9 Superuser
9 Ubuntu
7 C++
7 Hash