タイトルの2つの例は非常に異なる結果をもたらします。最初の項目(sort -k2,2 -nk6,6 foo
)は次の結果を返します。
153759 townhome 900 2 1 79000
876543 townhome 745 2 1 79000
222999 townhome 850 2 2 83333
759153 condo 850 2 1.5 85000
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
など。
2番目(sort -k2,2 -k6,6n foo
)は次を返します。
759153 condo 850 2 1.5 85000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
777894 condo 790 3 1 101000
221155 condo 1030 3 1 109500
248624 duplex 1250 3 1 120000
987654 duplex 1100 3 1.5 140000
これが私が探している正しい結果です。
この違いの原因は何ですか?
答え1
〜のようにマイクセルフしかし、より多くの単語は次のとおりです。
「グローバル」-n
数値ソートオプションを使用すると、すべてのキーに対して数値ソートを使用するようにソートのグローバル動作が変更されます(引用する)gkey.numericを設定してから設定する各キーの設定グローバルに設定された数値ソートオプションのソートオプション。これによりフィールド2のソートが失敗するため、代わりにフィールド6がソート(数値)されます。
設定n
注文オプション内部的には、このオプションは-k
このフィールドの並べ替えにのみ影響するため、フィールド2が一意でないまで並べ替えてから、フィールド6を数値で並べ替えます。
最初のソートされた例では「二重」行が見つからなかったため、すべての例行を一意に組み合わせて新しいサンプル入力ファイルを作成しました。
153759 townhome 900 2 1 79000
221155 condo 1030 3 1 109500
222999 townhome 850 2 2 83333
248624 duplex 1250 3 1 120000
444555 condo 930 2 1 99999
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
759153 condo 850 2 1.5 85000
777894 condo 790 3 1 101000
876543 townhome 745 2 1 79000
987654 duplex 1100 3 1.5 140000
...フラグを使用してソートの動作を表示できます--debug
。 「一致しない」警告と並べ替えに使用される行の部分を表す6番目のフィールドの下線を参照してください。
$ sort -k2,2 -nk6,6 --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
153759 townhome 900 2 1 79000
^ no match for key
_____
_____________________________
876543 townhome 745 2 1 79000
^ no match for key
_____
_____________________________
222999 townhome 850 2 2 83333
^ no match for key
_____
_____________________________
759153 condo 850 2 1.5 85000
^ no match for key
_____
____________________________
453215 townhome 1000 3 1.5 86000
^ no match for key
_____
________________________________
646484 condo 890 3 1 93333
^ no match for key
_____
__________________________
444555 condo 930 2 1 99999
^ no match for key
_____
__________________________
777894 condo 790 3 1 101000
^ no match for key
______
___________________________
221155 condo 1030 3 1 109500
^ no match for key
______
____________________________
248624 duplex 1250 3 1 120000
^ no match for key
______
_____________________________
987654 duplex 1100 3 1.5 140000
^ no match for key
______
_______________________________
比較:
$ sort -k2,2 -k6,6n --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
sort: leading blanks are significant in key 1; consider also specifying 'b'
759153 condo 850 2 1.5 85000
______
_____
____________________________
646484 condo 890 3 1 93333
______
_____
__________________________
444555 condo 930 2 1 99999
______
_____
__________________________
777894 condo 790 3 1 101000
______
______
___________________________
221155 condo 1030 3 1 109500
______
______
____________________________
248624 duplex 1250 3 1 120000
_______
______
_____________________________
987654 duplex 1100 3 1.5 140000
_______
______
_______________________________
153759 townhome 900 2 1 79000
_________
_____
_____________________________
876543 townhome 745 2 1 79000
_________
_____
_____________________________
222999 townhome 850 2 2 83333
_________
_____
_____________________________
453215 townhome 1000 3 1.5 86000
_________
_____
________________________________