- sort 命令 默认是打印出来,可以通过定向符> 或-o 指定输出文件
- -t ' ' 指定分隔符为空格
- -k 指定按分隔后的第几域排序
- -n 按数值大小排序,默认是升序(从小到大)
- -r 表示逆序 reverse
- sort -t ' ' -k 1 sort_test.file # 对第一域默认按ASCII码值排序
- sort -t ' ' -n -k 2 sort_test.file # 对第二域按数值大小排序
- sort -t ' ' -n -k 2 -k 3 sort_test.file # 对第二域按数值排序,当第二域相同时按第三域排序
- sort -t ' ' -n -k 3r -k 2 sort_test.file # 按第3域倒序,相同时按第二域升序排。 等同于 sort -t ' ' -k 3nr -k 2n sort_test.file
解析 -k 格式。
[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]
Fstart 即开始的域 .CStart即在Fstart域内第几个字符 (F:Filed, C:Character) 。CStart缺省表示首字符开始
- Modifier: 修饰符,如n,r等
- FEnd 截止域,CEnd 截止域内的第几个字符。 FEnd缺省表示到行尾,CEnd表示这个域尾
- 例子:sort -t ' ' -k 1.2 sort_test.file 从第一个域的第二个字母(到结尾)排序
-
sort -t ' ' -k 1.2,1.2 -k 3,3nr sort_test.file 。按照第一域的第二个字符排序,如果相同则按第三域的值排序 与sort -t ' ' -k 1.2,1.2 -k 3nr sort_test.file 意思相同 -k 3,3 与-k3 都表示完整的第三域
- 注意含义不同的:
- sort -t ' ' -k 1.2 -k 3,3nr sort_test.file # 表示从第一域的第二字符一直到该域最后一个字符排序,如果还存在相等,再按第三域数值排序
- sort -t ' ' -k 1 -k 3,3nr sort_test.file #从第一域的第一个字符到该域最后一个字符排序,如果还存在相等项,按第三域数值排序
备注: sort -n -k 2.2,3.1 -k 1,1r sort_test.file 。这里会比较第二域第二字符到结尾字符几位的数值排序,(0 00 00 10)然后比较第一域倒向排序
这种 -k2.2,3.1 Fstart 与Fend跨域的是失效的,只会到前面域结束为止。