36

请不要认为这是“在 unix 中对字母数字数据进行排序”问题的重复......我查看了其他答案,并认为我的情况有点不同!

我有这样的数据:

A    192
D    112
D    188
C    091
A    281
B    919

...而且我想对第一列(按字母顺序)进行排序,然后按第 2 列(按数字顺序)。我尝试使用:

sort -n -k1,2

...但这使我对第一个字段进行了正确排序,但随后对第二个字段进行了错误排序(1000,1002,1003,10,1 ...而不是 1,10,1000,1002,1003)。

有人可以建议如何按照我想要的方式对这两列进行排序吗?

4

2 回答 2

45

尝试像这样使用:-

sort -k1,1 -k4,4n
  • -n : 使程序按数值排序
  • -k opts:使用给定的列号对数据/字段进行排序。例如,选项 -k 2 使程序使用第二
    列数据进行排序。选项 -k 3,3n -k 4,4n 对每一列进行排序。首先
    它将对第 3 列进行排序,然后对第 4 列进行排序。
于 2013-08-12T17:55:48.013 回答
7

这应该有效:

sort -t "," -k1,1 -k2n,2 file
于 2014-02-20T20:53:40.777 回答