我在排序包含这些行的文件(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。 这些命令正确排序:
这个请求是什么导致错误的参数变成数字并占优势?有没有办法避免它?我以编程方式生成排序参数,虽然我可以在这种情况下组合相邻的字段,但我并不相信我会再次遇到这种情况。
在linux 3.2.0-70-generic和osx 10.9.5上重现。
答案 0 :(得分:2)
-n
是一个整体程序选项,不是任何键描述符的一部分,即使你以你的方式将它与键描述符进行物理组合也是如此。如果您只希望第一个键按数字排序,那么这将是
sort -k1,1n -k2,2 -k3,3
实际上产生了与输入相同的顺序。
答案 1 :(得分:0)
数字排序的选项不会处理十六进制表示,并且可以处理十六进制数字的字符串表示。正如约翰所提到的,你需要在你想要数字排序的字段上放置“n”选项。
如果您想以数字方式对十六进制字段进行排序: