[英]Sorting a file by multiple columns using bash sort
这是我正在使用的文件
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
您也可以在一个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
您没有使用-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
(人类数字)等。
回答
$ 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
我建议第一个选择。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.