简介
linux下的排序操作离不开sort,总结一下易用错的地方。
主要选项
1 | -b:寻找排序的keys时忽略前导的空白字符(blank) |
常用且易错的用法
分隔符
和其它常见的linux工具不同的是,默认的分隔符是 非空白字符(non-blank charactor)和空白字符(blank charactor) 和之间的空字符串(empty string “”)(一定是前面是非空白,后面是空白之间的)
如:" foo bar"
默认分成两段 " foo"
和" bar"
,注意前面有空格。
明确这点很重要,会引出-b的使用。
-b选项
sort如不指定-k,默认的keys就是整行。-b可以忽略key前导的空白字符(默认就是空格和Tab) 。
-k选项
-k pos1[,pos2]
指定要排序的keys的位置,如果结束位置忽略,就一直到整行的结尾,所以不建议随意省略结束位置
开始和结束位置都是这样的格式:f[.c][opts]
f是区段号,从1开始
.c是区段开始的第几个字符,从1开始
如果.c在开始区段时省略,则从第1个字符开始;如果.c在结束区段时省略,相当于默认设置的0,一直到区段的结尾。opts
是选项 MbdfghinRrV
,每个key都可以有不同的选项,会覆盖全局的选项(只要为key指定一个选项,全局的选项对该key就会失效)
除了-b选项,其它选项写在开始位置 或 结束位置 是等价的。
如: -k 2n,2 or -k 2n,2n 和-k 2,2n
是等价的。
可以指定多个-k ,先按最前的-k排序,再按后面的-k排序。
-n 选项
只识别 -(负号),数字,千位分隔符,小数点。 不识别+号,指数符e,字母
如果-n 跨区段比较(肯定有区段间的分隔符),或碰到不识别的会立即停止往后寻找key。
–debug
可以直观看到排序的keys
-s 选项
sort默认有 最后排序(last-resort comparison),按整行的ascii顺序排序,可能会使结果不稳定。
加-s 选项会阻止最后排序,使结果稳定。
-u选项也会阻止最后排序