这是这个问题的后续: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.9n
sort 会产生以下输出:
% 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 个字符进行排序操作。