Linux sort命令的几个细节问题
Linux sort命令的原理是逐行按字符进行比较排序,当然,也可以通过命令行参数设定按数字进行比较,或者指定行间的分隔符,对某一个或一些字段按照自己指定的规则进行排序。这是一个很常用而且很方便的命令,但是其中的一些细节需要注意,否则会得到错误的排序结果。
1. 比较方式
前面说过,sort命令默认是按照字符串排序,真的是这样么?看看sort的help信息,末尾有这样的文字:
~$ cat text 1|101|21|10|2~$ echo $LC_ALLC~$ sort -t "|" -k 2 text 1|101|21|10|2~$ sort -t "|" -k 2,2 text 1|10|21|101|2
虽然10排在101前面,但是不指定字段结束时,默认会继续比较,即比较’|’和’1’,所以有上面的结果。
通常,我们只希望按照一个或者多个字段排序,而不希望从某个字段开始一直比较到行末,所以用这个参数时最好同时指定start和end。
5. 多条件排序
在按字段排序时如果想采用多个排序条件,如先按第二列升序,如果相同则按第三列降序,可以使用多个-k参数,如-k 2,2n –k 3,3nr