这是我正在使用的文件
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
Run Code Online (Sandbox Code Playgroud)
当我尝试排序命令时
sort -k1,1 -k2,2 -k3,3 file.txt
Run Code Online (Sandbox Code Playgroud)
我收到以下信息;我不明白为什么第 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
Run Code Online (Sandbox Code Playgroud)
当我尝试将 -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
Run Code Online (Sandbox Code Playgroud)
我想要的结果是
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
Run Code Online (Sandbox Code Playgroud)
您缺少-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
Run Code Online (Sandbox Code Playgroud)
请注意,您可以提供全局-n
标志,将所有字段按数值或按键排序。键的格式是-k KEYDEF
,其中KEYDEF
是F[.C][OPTS][,F[.C][OPTS]]
和OPTS
是一个或多个排序选项,如n
(数字)、r
(反向)、g
(通用数字)、h
(人类数字)等。
您还可以在一个 KEYDEF 中组合字段 2-3,例如
$ sort -k1,1 -k2,3n file
Run Code Online (Sandbox Code Playgroud)
输出
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
Run Code Online (Sandbox Code Playgroud)