说我有这个文件。
$ cat a.txt
c 1002 4
f 1001 1
d 1003 1
a 1001 3
e 1004 2
b 1001 2
我想按第二列排序,然后按第三列排序。第二列是数字,而第三列可以视为字符串。我知道以下命令效果很好。
$ sort -k2,2n -k3,3 a.txt
f 1001 1
b 1001 2
a 1001 3
c 1002 4
d 1003 1
e 1004 2
不过,我认为sort -k2n a.txt
应该也可以工作,但事实并非如此。
$ sort -k2n a.txt
a 1001 3
b 1001 2
f 1001 1
c 1002 4
d 1003 1
e 1004 2
似乎它按第二列排序,然后按第一列而不是第三列排序。为什么会发生这种情况?这是不是一个错误?原因sort -k2 a.txt
可以正常处理上述数据,因为这些数字只是固定宽度。
我的排序版本是sort (GNU coreutils) 8.15
在 Cygwin 中。
我发现这种谨慎GNU 排序文档 http://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html.
对第二个字段进行数字排序并通过排序解决平局问题
按字母顺序排列在第五字段的第三个和第四个字符上。使用
‘:’作为字段分隔符。
sort -t : -k 2,2n -k 5.3,5.4
请注意,如果您写的是 -k 2n 而不是 -k 2,2n 排序将会有
使用从第二个字段开始并延伸到
行尾作为主数字键。对于绝大多数人来说
应用程序,将跨越多个字段的键视为数字
不会做你期望的事。
我不确定当它将“1001 3”评估为数字键时它最终会得到什么,但“不会执行您期望的操作”是准确的。很明显,正确的做法是独立指定每个键。
同一个网页提到了解决“关系”的问题。
最后,作为最后的手段,当所有键比较相等时,排序比较
整行就好像除了 --reverse (-r) 之外没有其他排序选项
指定的。
我承认我对如何解释这一点有点困惑。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)