最初の列に基づいて降順にデータをソートし、値が等しい場合は2番目の列を昇順に使用します

最初の列に基づいて降順にデータをソートし、値が等しい場合は2番目の列を昇順に使用します

以下を明確に説明してください。

いくつかのキーワードと使用頻度があるとしましょう。

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

おすすめ記事