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

时间:2013-01-31 11:39:33

标签: linux shell unix sorting

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

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 个答案:

答案 0 :(得分:26)

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

sort -k1,1 -k2n

答案 1 :(得分:7)

几乎是正确的。试试这个:

sort -k1,1 -k2,2n

答案 2 :(得分:5)

如果您排序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