【标准答案】sort命令多列排序/复合条件的方法

这只是一个小问题,但是假攻略太多了,所有发出真正的答案。

数据如下:

ba 11 a
ab 1 b
aa 1 c
ba 3 d

要求:先按第一列排序,如果重复,再按第2列以数字方式排序


先看一下非常容易百度出来的错误答案:

百度搜索"sort 多列排序"

第一条:   并列参数, 也就是 sort -k1 -k2n file,输出如下,错误:

aa 1 c
ab 1 b
ba 11 a
ba 3 d
第二条:   同上,后面发现了问题,但是给出了错误的解释

第三条: 答案是对的,但没解释,sort -k1,1 -k2,2n file,输出如下:

aa 1 c
ab 1 b
ba 3 d
ba 11 a


再后面对错都有了。所以请记住要长记性,此处省略……


正解及原因:

        答案是:sort -k1,1 -k2,2n file

         原因很简单,只要man sort一下看一下说明就行了:

KEYDEF  is  F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and
       the stop position defaults to the line's end.  If neither -t nor -b is in effect, characters in a field are counted from  the  beginning  of  the  preceding
       whitespace.  OPTS is one or more single-letter ordering options [bdfgiMhnRrV], which override global ordering options for that key.  If no key is given, use
       the entire line as the key.

      说的很清楚了,-k的参数是一对,开始和结束,如果未指定结束,则默认是行尾,不是字段结束。其他人错误原因是:如果字段等长,且测试字段相邻,未指定数字等,会导致一些巧合现象。


       再强调一遍, -k2 并不是按第2列排序,而是第2列开始,一个到行尾所有内容拿出来排序。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值