这是我正在使用的文件
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
您缺少-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-3 组合在一个 KEYDEF 中,例如
$ 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
答案
$ sort -k1,1 -k2,2n -k3,3n file.txt
随机IR提供的在每种情况下都是正确的。
下面提到的由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
我推荐第一个选项。