sort 命令对文件多列详细排序

  • sort 命令 默认是打印出来,可以通过定向符>  或-o 指定输出文件
  • -t ' ' 指定分隔符为空格
  • -k 指定按分隔后的第几域排序
  • -n 按数值大小排序,默认是升序(从小到大)
  • -r 表示逆序 reverse
  1. sort -t ' ' -k 1 sort_test.file # 对第一域默认按ASCII码值排序 
  2.  sort -t ' ' -n -k 2 sort_test.file  # 对第二域按数值大小排序
  3. sort -t ' ' -n -k 2 -k 3 sort_test.file # 对第二域按数值排序,当第二域相同时按第三域排序 
  4. 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表示这个域尾
  1. 例子:sort -t ' ' -k 1.2 sort_test.file 从第一个域的第二个字母(到结尾)排序
  2. 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 都表示完整的第三域

  3. 注意含义不同的:
    1. sort -t ' ' -k 1.2 -k 3,3nr sort_test.file  # 表示从第一域的第二字符一直到该域最后一个字符排序,如果还存在相等,再按第三域数值排序
    2. 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跨域的是失效的,只会到前面域结束为止。

本文来自博客园,作者:BioinformaticsMaster,转载请注明原文链接:https://www.cnblogs.com/koujiaodahan/p/15795325.html

原文地址:https://www.cnblogs.com/koujiaodahan/p/15795325.html