这是我正在使用的文件
word01.2 10 25
word01.2 30 50
word01.1 10 30
word01.1 40 50
word01.2 40 50
word01.1 10 20
word01.1 5 8
当我尝试我的排序命令时
sort -k1,1 -k2,2 -k3,3 file.txt
我收到以下内容;我不明白为什么第2行和第1行没有排序,它们应该处于反向位置
word01.1 10 30
word01.1 10 20
word01.1 40 50
word01.1 5 8
word01.2 10 25
word01.2 30 50
word01.2 40 50
当我尝试将-g添加到排序时,排序的文件有更多问题,第1列不再排序
sort -k1,1 -gk2,2 -gk3,3 file.txt
word01.1 5 8
word01.1 10 20
word01.2 10 25
word01.1 10 30
word01.2 30 50
word01.1 40 50
word01.2 40 50
我想要的结果是
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
答案 0 :(得分:4)
您还可以在一个KEYDEF中组合字段2-3,例如
$ sort -k1,1 -k2,3n file
<强>输出强>
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
答案 1 :(得分:3)
您错过了-n
/--numeric-sort
选项,根据字符串数值排序,而不是按字典顺序排序(至少对于第二和第三字段):
$ sort -k1,1 -k2,2n -k3,3n file.txt
word01.1 5 8
word01.1 10 20
word01.1 10 30
word01.1 40 50
word01.2 10 25
word01.2 30 50
word01.2 40 50
请注意,您可以提供全局-n
标记,将所有字段排序为数值或按键。密钥格式为-k KEYDEF
,其中KEYDEF
为F[.C][OPTS][,F[.C][OPTS]]
,OPTS
为排序选项中的一个或多个,如n
(数字),r
(反向),g
(通用数字),h
(人类数字)等。
答案 2 :(得分:1)
答案
$ sort -k1,1 -k2,2n -k3,3n file.txt
在每种情况下,randomir提供的都是正确的。
下面提到的是David C粘贴的组合选项。由于Randin仅比较第三列中的第一位,因此无法正常工作。
$ sort -k1,1 -k2,3n file
即下面粘贴的文件将无法正确排序:
word01.2 10 25
word01.2 30 50
word01.1 10 30
word01.1 40 50
word01.2 40 50
word01.1 10 20
word01.1 5 8
word01.1 410 50
word01.1 45 120
word01.1 45 100
word01.1 45 1000
word01.1 40 6
我建议第一个选择。