Sorting unix排序与数字和非数字混合不一致

Sorting unix排序与数字和非数字混合不一致,sorting,unix,Sorting,Unix,我在对包含以下行的文件(badsort.small)排序时遇到问题: 0 foo 30 0 foo/bar 26 0 foo/bar 2b 0 foo/bar 30 0 foo/bar 73 0 foo/bar 91 0 foo/bar d3 以下排序给出了奇怪的结果: sort-nk1,1-k2,2-k3,3 badsort.small 0 foo/bar d3 0 foo/bar 2b 0 foo/bar 26 0 foo 30 0 foo/bar 30 0 foo/bar 73 0 fo

我在对包含以下行的文件(badsort.small)排序时遇到问题:

0 foo 30
0 foo/bar 26
0 foo/bar 2b
0 foo/bar 30
0 foo/bar 73
0 foo/bar 91
0 foo/bar d3
以下排序给出了奇怪的结果:

sort-nk1,1-k2,2-k3,3 badsort.small

0 foo/bar d3
0 foo/bar 2b
0 foo/bar 26
0 foo 30
0 foo/bar 30
0 foo/bar 73
0 foo/bar 91
这相当于sort-nk3,3。 这些命令正确排序:

  • 排序-k1,1-k2,2-k3,3
  • 排序-nk1,1-k2,3
  • 排序-k2,2-k3,3
这个请求是什么导致错误的参数变成数字并占上风的?有办法避免吗?我以编程方式生成排序参数,虽然在这种情况下我可以合并相邻字段,但我不确定我不会再次遇到这种情况


在linux 3.2.0-70-generic和osx 10.9.5上复制。

-n
是一个整体程序选项,而不是任何键描述符的一部分,即使您以这样的方式将其与键描述符进行物理组合。如果只希望第一个键按数字排序,则

sort -k1,1n -k2,2 -k3,3

这实际上产生的顺序与输入的顺序相同。

用于数字排序的选项不考虑十六进制表示,而是处理十六进制数字的字符串表示。正如John所提到的,您需要将“n”选项放在希望进行数字排序的字段上

如果要对十六进制字段进行数字排序:


预期的输出是什么?排序不会使用十六进制,并且您有“-n”作为所有字段的选项预期的输出与开始相同-但问题已在下面回答。+1关于sortThanks的“-n”方面的清晰解释-编造一些语法感觉很傻,但很高兴了解情况!