web-dev-qa-db-ja.com

最初の列をテキストで並べ替え、次に2番目の列を「並べ替え」で数値順に並べ替える方法を教えてください。

次のファイルを並べ替えようとしています。

a 2
b 1
a 10

私は得る必要があります:

a 2
a 10
b 1

-kPOS [opts]オプションについて知っているので、それを使用してみます。

sort -k1 -k2n file

しかし、このコマンドは私にのみ与えます:

a 10
a 2
b 1

したがって、最初の列でソートされますが、2番目の列ではソートされません。実行中sort -k2n fileは2番目の列でソートします。

b 1
a 2
a 10

2列で並べ替えるにはどうすればよいですか?

編集:

ソート(GNU coreutils)5.93

14
Necto

主キーを終了する必要があります。そうしないと、sortは指定されたフィールドから始まるすべてのフィールドを使用します。

sort -k1,1 -k2n
28
choroba

ほぼ正しいです。これを試して:

sort -k1,1 -k2,2n
7

あなたが持っている場合 GNU sort並べ替えると、バージョンの並べ替えを実行できます。

$ sort -V file
a 2
a 10
b 1

オプション:

-V, --version-sort          natural sort of (version) numbers within text

バージョンの並べ替えのいいところは、列に関係なく機能することです。

$ cat file
a2
b1
a10

$ sort -V file
a2
a10
b1
5
Chris Seymour