並べ替えのバグまたは誤解

並べ替えのバグまたは誤解

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

b 10 foo
a 10 bar
a 2 bar

3 列目をアルファベット順に並べ替えたい。同点の場合は、2 列目を数値順に並べ替えたい。Unix ソート プログラムのマニュアル ページには、次の記述があります。

> sort -k3 -k2n a

これにより

a 2 bar
a 10 bar
b 10 foo

どちらが正しい。

さて、私が実際に望んでいるのは、最初の列をアルファベット順に並べ替え、同点の場合は2番目の列を数字順に並べ替えることです。誰か理由を説明してもらえますか?

> sort -k1 -k2n a

与える

a 10 bar
a 2 bar
b 10 foo

明らかに間違っているのはどれでしょうか?

答え1

あなたの例が期待通りに動作しない理由は、sortすべての位置を考慮しているためです指定されたものも同様です。あなたの例では、辞書はの前にある-k1文字列を並べ替えるので、タイブレークは必要ありません。a 10 bara 2 bar

マニュアル ページに記載されているように、ソート キーの制限を明示的に指定する必要があります。

   -k, --key=POS1[,POS2]
          start a key at POS1, end it at POS2 (origin 1)

例:

$ sort -k1,1 -k2n theFile
a 2 bar
a 10 bar
b 10 foo

関連情報