7

このファイルがあるとします。

$ cat a.txt
c 1002 4
f 1001 1
d 1003 1
a 1001 3
e 1004 2
b 1001 2

2 列目で並べ替え、次に 3 列目で並べ替えたいと思います。列 2 は数値ですが、列 3 は文字列として扱うことができます。次のコマンドがうまく機能することはわかっています。

$ sort -k2,2n -k3,3 a.txt
f 1001 1
b 1001 2
a 1001 3
c 1002 4
d 1003 1
e 1004 2

ただし、sort -k2n a.txt機能しない場合でも機能するはずです。

$ sort -k2n a.txt
a 1001 3
b 1001 2
f 1001 1
c 1002 4
d 1003 1
e 1004 2

列 2 で並べ替え、次に列 3 ではなく列 1 で並べ替えるようです。なぜこうなった?それはバグですか?これらの数値sort -k2 a.txtは固定幅であるため、上記のデータで問題なく動作します。

私のソートバージョンはsort (GNU coreutils) 8.15cygwinです。

4

1 に答える 1

10

この注意事項はGNU sort docsにあります。

2 番目のフィールドを数値で並べ替え、5 番目のフィールドの 3 番目と 4 番目の文字をアルファベット順に並べ替えて同点を解決します。フィールド区切り文字として「:」を使用します。

      sort -t : -k 2,2n -k 5.3,5.4

-k 2,2n の代わりに -k 2n を記述した場合、sort は 2 番目のフィールドで始まり行末までのすべての文字を主数値キーとして使用することに注意してください。大部分のアプリケーションでは、複数のフィールドにまたがるキーを数値として扱うことは、期待どおりの結果をもたらしません。

'1001 3' を数値キーとして評価したときにどうなるかはわかりませんが、「期待どおりに動作しません」が正確です。正しいことは、各キーを個別に指定することであることは明らかです。

同じ Web ページには、「関係」の解決について次のように書かれています。

最後に、すべてのキーが等しい場合の最後の手段として、--reverse (-r) 以外の順序付けオプションが指定されていないかのように、sort は行全体を比較します。

私はそれをどのように解釈するかについて少し当惑していることを告白します.

于 2013-06-08T11:18:09.793 に答える