如何使用“sort”按第一列文本排序,然后再按第二列数字排序?

16

我正在尝试对以下文件进行排序:

a 2
b 1
a 10

我需要获得:

a 2
a 10
b 1

我知道-kPOS [opts]选项,并尝试使用它:


sort -k1 -k2n file

但这个命令只给了我:

a 10
a 2
b 1

它按第一列排序,但不按第二列排序。只运行sort -k2n file将按第二列排序。

b 1
a 2
a 10

如何按两列排序?

编辑:

sort(GNU coreutils)5.93

3个回答

31

你必须终止主键,否则排序将使用从给定字段开始的所有字段:

sort -k1,1 -k2n

7
几乎正确。试试这个:
sort -k1,1 -k2,2n

6
如果您有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

我使用的是sort(GNU coreutils)5.93版本。它没有“-V”选项。 - Necto
我安装的是sort(GNU coreutils)8.15版本。很遗憾,查看--help以查看版本排序是否可在不同选项下使用。 - Chris Seymour
--help 中,除了 --version 选项外,我没有看到任何版本选项。不管怎样,这是什么魔法?“版本排序”是什么意思? - Necto
我在我的回答中添加了一些更多的信息。 - Chris Seymour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接