このファイルがあるとします
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 bar
a 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