sort 在做什么

sort 在做什么

这是这个问题的后续:sort -n 对非数值有什么作用?

这是我的输入:

1-----***
R----****
1---*****

然后我跑了:

sort -k 1.2,1.9n input.txt > output.txt

这是我的输出:

1-----***
1---*****
R----****

我的预期输出:

1---*****
R----****
1-----***

我期望此输出,因为 * (42) 的 ASCII 值小于 - (45) 的值。然而,似乎 R 正在被考虑在排序中,但我认为 1.2,1.9 会排除它。我究竟做错了什么?

答案1

您使用的排序键无效(无效,因为它与您的输入文本不匹配)。排序的信息手册建议使用该--debug选项来调查其键匹配的行为。使用命令键 , 1.2,1.9nsort 会产生以下输出:

% sort -k 1.2,1.9n --debug input.txt 
sort: using ‘en_US.UTF-8’ sorting rules
1-----***
 ^ no match for key
_________
1---*****
 ^ no match for key
_________
R----****
 ^ no match for key
_________

并且似乎会退回到使用整个字段的默认排序。如果您省略n密钥中的 并仅使用1.2,1.9您会得到以下内容:

% sort -k 1.2,1.9 --debug input.txt 
sort: using ‘en_US.UTF-8’ sorting rules
1-----***
 ________
_________
R----****
 ________
_________
1---*****
 ________
_________

它正确使用第一个字段的第 2 个到第 9 个字符进行排序操作。

相关内容