免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ben123one
打印 上一主题 下一主题

[文本处理] sort排序-k 感觉不按常规出牌 [复制链接]

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
31 [报告]
发表于 2012-07-26 11:42 |只看该作者
回复 28# ben123one


    什么意思?

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
32 [报告]
发表于 2012-07-26 14:24 |只看该作者
回复 27# blackold


    黑锅好
    有些地方我写的不够准确,多谢指教~
    关于a,sort -k2 等于 sort -k2,5
    b,我的理解是这样的,sort -k2 -s 等于 对2列排序后就停止排序,并不是直到返回1列前停止的 :

  1. echo '1 2 1 3
  2. 2 2 2 2
  3. 1 2 3 4' |sort -n -k2
  4. 1 2 1 3
  5. 1 2 3 4
  6. 2 2 2 2

  7. echo '1 2 1 3
  8. 2 2 2 2
  9. 1 2 3 4' |sort -n -k2 -s
  10. 1 2 1 3
  11. 2 2 2 2
  12. 1 2 3 4
复制代码
最后关于字段排序,又理解了一遍,更加深刻,再谢

论坛徽章:
0
33 [报告]
发表于 2012-07-26 14:32 |只看该作者
就是你前面说的:
   sort -nr -k2 a.txt
  
这是数值排序。 -k 2 相当于 -k 2,5
sort 试图对 2,5进行数值排序,但sort 只认k2,2,即只把2字段当作数值看待(只认识前面的数值)。

在这种情况下,sort 按 k2,2进行数值排序后,会对 1,3,4,5组成的"字符串“进行字符串排序。

如果不是数值排序,重排的情况就不同了。

也就是只有第二列按照数值排序,后面的是按照其他列组成的字符串排序的



回复 31# blackold


   

论坛徽章:
0
34 [报告]
发表于 2012-07-26 14:33 |只看该作者
黑哥,你看这个如何解释?

关于-t 分割,默认是tab吧,为何咱用一个空格也默认识别呢?
比如
2ab742e518d6d8fe9f8067e299109befedcbc1f4            75         0      0         22      0         0     75         0
2ab742e518d6d8fe9f8067e299109befedcbc1f3            75         0      0           1      0         0     75         0


回复 27# blackold


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
35 [报告]
发表于 2012-07-26 14:46 |只看该作者
本帖最后由 rdcwayx 于 2012-07-26 15:05 编辑

`-t SEPARATOR'
     Use character SEPARATOR as the field separator when finding the
     sort keys in each line.  By default, fields are separated by the empty string between a non-whitespace character and a whitespace
     character.
That is, given the input line ` foo bar', `sort'
     breaks it into fields ` foo' and ` bar'.  The field separator is
     not considered to be part of either the field preceding or the
     field following.

论坛徽章:
0
36 [报告]
发表于 2012-07-26 14:49 |只看该作者
但是您前面写了:
在1前面加1个空格,结果就不同了,那么-t的意思是取每列所有空格中最小的,其他的空格都要计算进去吧?

另外,根据man,sort不是按照单个字段逐个排序的,除非逐个指定字段 cat urfile1

a 30 0 30 0

a 30  1 40 0         //在1之前添加一个空格
a 30 1 20 0

a 20 0 40 0



$ sort -rn -k2 urfile1

a 30 1 20 0

a 30 0 30 0

a 30  1 40 0

a 20 0 40 0
复制代码如果是逐个字段排序,结果应该是:a 30  1 40 0

a 30 1 20 0

a 30 0 30 0

a 20 0 40 0
复制代码



回复 35# rdcwayx


   

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
37 [报告]
发表于 2012-07-26 15:31 |只看该作者
确实比较头疼,这种情况也不要钻牛角尖了, 加条命令直接去掉那些连续空格即可。
  1. awk '$1=$1' urfile1 |sort -rn -k2
复制代码

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
38 [报告]
发表于 2012-07-26 15:39 |只看该作者
回复 33# ben123one


    是 "1,3,4,5" 而不是"3,4,5,1"。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
39 [报告]
发表于 2012-07-26 15:41 |只看该作者
回复 36# ben123one


    -t是指定分隔符。

  默认分隔符不是tab也不是space,而是非空白符与空白符之间的空串。

论坛徽章:
5
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015年亚洲杯之朝鲜
日期:2015-03-13 22:47:33IT运维版块每日发帖之星
日期:2016-01-09 06:20:00IT运维版块每周发帖之星
日期:2016-03-07 16:27:44
40 [报告]
发表于 2012-07-26 15:42 |只看该作者
回复 34# ben123one


    贴上你的命令。简要地说明你的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP