标题中的两个示例产生非常不同的结果。第一个 ( sort -k2,2 -nk6,6 foo
) 返回以下结果:
153759 townhome 900 2 1 79000
876543 townhome 745 2 1 79000
222999 townhome 850 2 2 83333
759153 condo 850 2 1.5 85000
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
ETC。
第二个 ( sort -k2,2 -k6,6n foo
) 返回:
759153 condo 850 2 1.5 85000
646484 condo 890 3 1 93333
444555 condo 930 2 1 99999
777894 condo 790 3 1 101000
221155 condo 1030 3 1 109500
248624 duplex 1250 3 1 120000
987654 duplex 1100 3 1.5 140000
这些是我正在寻找的正确结果。
是什么导致了这种差异?
答案1
作为迈克塞夫 说,但更多的话:
使用“全局”-n
数字排序选项会更改排序的全局行为,以对所有键使用数字排序(参考)通过设置 gkey.numeric 然后再设置设置每个键的全局设置的数字排序选项的排序选项。这会导致字段 2 的排序失败,因此会转而对字段 6 进行(数字)排序。
设置n
订购选项该选项内部-k
仅影响对该字段的排序,因此它可以对字段 2 进行排序,直到该字段不唯一为止,然后对字段 6 进行数字排序。
因为我在第一个排序示例中找不到“双工”行,所以我独特地组合了所有示例行来创建一个新的示例输入文件:
153759 townhome 900 2 1 79000
221155 condo 1030 3 1 109500
222999 townhome 850 2 2 83333
248624 duplex 1250 3 1 120000
444555 condo 930 2 1 99999
453215 townhome 1000 3 1.5 86000
646484 condo 890 3 1 93333
759153 condo 850 2 1.5 85000
777894 condo 790 3 1 101000
876543 townhome 745 2 1 79000
987654 duplex 1100 3 1.5 140000
...我们可以用标志来演示排序的行为--debug
;请注意第 6 个字段上的“不匹配”警告和下划线,指示排序用于排序的行部分:
$ sort -k2,2 -nk6,6 --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
153759 townhome 900 2 1 79000
^ no match for key
_____
_____________________________
876543 townhome 745 2 1 79000
^ no match for key
_____
_____________________________
222999 townhome 850 2 2 83333
^ no match for key
_____
_____________________________
759153 condo 850 2 1.5 85000
^ no match for key
_____
____________________________
453215 townhome 1000 3 1.5 86000
^ no match for key
_____
________________________________
646484 condo 890 3 1 93333
^ no match for key
_____
__________________________
444555 condo 930 2 1 99999
^ no match for key
_____
__________________________
777894 condo 790 3 1 101000
^ no match for key
______
___________________________
221155 condo 1030 3 1 109500
^ no match for key
______
____________________________
248624 duplex 1250 3 1 120000
^ no match for key
______
_____________________________
987654 duplex 1100 3 1.5 140000
^ no match for key
______
_______________________________
对比:
$ sort -k2,2 -k6,6n --debug < input
sort: using ‘en_US.UTF-8’ sorting rules
sort: leading blanks are significant in key 1; consider also specifying 'b'
759153 condo 850 2 1.5 85000
______
_____
____________________________
646484 condo 890 3 1 93333
______
_____
__________________________
444555 condo 930 2 1 99999
______
_____
__________________________
777894 condo 790 3 1 101000
______
______
___________________________
221155 condo 1030 3 1 109500
______
______
____________________________
248624 duplex 1250 3 1 120000
_______
______
_____________________________
987654 duplex 1100 3 1.5 140000
_______
______
_______________________________
153759 townhome 900 2 1 79000
_________
_____
_____________________________
876543 townhome 745 2 1 79000
_________
_____
_____________________________
222999 townhome 850 2 2 83333
_________
_____
_____________________________
453215 townhome 1000 3 1.5 86000
_________
_____
________________________________