sort -k4nrとsort -k 4 -n -rが異なる結果を与えるのはなぜですか? [コピー]

sort -k4nrとsort -k 4 -n -rが異なる結果を与えるのはなぜですか? [コピー]

これは私のファイルです。最初の行はファイルの一部ではありません(行を含むFname ..)。

Fname Lname Age Children 
John  Doe   61  2
Mary  Jane  32  5
Delta Cross 30  5
Sui   Ace   24  1

このファイルに基づいてソートしたいと思います。子供の数。ほとんどの子供から最も少ない子供までソートする必要があります。

私のコマンドは次のとおりです。sort -k 4 -n -r file.txtこれは、4番目の列に基づいて並べ替え、数字で並べ替え、逆順で並べ替えることを意味します。これは以下を生成します。

Mary  Jane  32  5
Delta Cross 30  5
John  Doe   61  2
Sui   Ace   24  1

それが私の記事がすることですsort -k4nr file.txt。これには2つの質問があります。

まず、オプションを(一緒にリンクするのではなく)スペースで区切る必要があると思いました。ソートやどのコマンドにも該当しませんか?

次に、これを行うと、「正しい」順序が得られます。しかし、Deltaまず、次のような結果が得られます。

Delta Cross 30  5
Mary  Jane  32  5
John  Doe   61  2
Sui   Ace   24  1

なぜこれですか?

ベストアンサー1

  1. GNUユーティリティは通常、単一文字オプションを単一のハイフンで構成されたグループに解析できます。-n -rこれは、誤解を招く可能性があるオプションが-nrない場合にのみ適用されます。nr

  2. sort は、-k 4 -n -rフィールド 4 をソートし、ファイルの各行を逆順にソートすることを意味します。ソートが完了し、52 つの -key 行が同じキー値に基づいてソートされると、行全体が次のようにソートされます。マニュアルページ:

    最後に、すべてのキーが同じであると判断された場合、最後の手段として sort は --reverse(-r) 以外のソートオプションが指定されていないかのように行全体を比較します。

…これがメアリーがデルタの前に現れた理由です。

代わりに使用する場合は、-k4nrsort フィールド 4 を使用し、そのフィールドを逆順に並べ替えるように指示します。並べ替えが 5 と 5 の比較を終えると、2 つの (完全な) 行が通常の辞書順に並べ替えられます (ここにはグローバル句オプションがないためr)、Delta が Mary の前に来ます。

おすすめ記事