免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: yinyuemi

[文本处理] 中秋送题目^_^ [复制链接]

论坛徽章:
24
申猴
日期:2014-10-10 15:56:39射手座
日期:2014-10-10 15:57:18黑曼巴
日期:2018-05-14 11:05:122016科比退役纪念章
日期:2018-05-14 11:05:0715-16赛季CBA联赛之北控
日期:2018-05-14 11:05:0015-16赛季CBA联赛之江苏
日期:2017-02-27 18:11:0715-16赛季CBA联赛之上海
日期:2018-08-15 09:48:5415-16赛季CBA联赛之佛山
日期:2018-07-20 17:14:2315-16赛季CBA联赛之佛山
日期:2019-09-10 18:08:4615-16赛季CBA联赛之山西
日期:2020-03-26 09:40:5115-16赛季CBA联赛之佛山
日期:2020-05-08 09:03:54
发表于 2014-09-09 10:50 |显示全部楼层
sort -n file | sed -r '/^-/{H;d};$G' | sed -r '/^-\s+-\s+-/{H;$!d;$g}'
凑个热闹

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2014-09-09 11:00 |显示全部楼层
ly5066113 发表于 2014-09-09 10:19
回复 57# blackold

@damcool


不错!可扩展到n列!

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
发表于 2014-09-09 14:37 |显示全部楼层
本帖最后由 jason680 于 2014-09-09 14:49 编辑

回复 36# yinyuemi


Would you like this way with asorti

$ awk '{d=$0;k="";for(n=1;n<=NF;n++){if($n=="-")x=9999;else{if($n>0){x=log($n)+7500}else{x=2500-log(-$n)};if($n=="0")x=5000};k=k sprintf("%012.8f,",x)}a[k]=d}END{t=asorti(a,s);for(n=1;n<=t;n++)print a[s[n]]}' FILE   

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-09-09 17:28 |显示全部楼层
回复 62# damcool

如何扩展?前面的sort可是一列列地排序~
   

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2014-09-09 18:09 |显示全部楼层
本帖最后由 damcool 于 2014-09-09 18:10 编辑
yestreenstars 发表于 2014-09-09 17:28
回复 62# damcool

如何扩展?前面的sort可是一列列地排序~
  1. sort -k1,4nr file | awk 'BEGIN{n=1}{if($n=="-"&&$(n+1)!="-")n++;a[n]=a[n]?$0"\n"a[n]:$0}END{for(i=1;i<=n;i++)print a[i]}''
复制代码
这样就可以了

论坛徽章:
32
处女座
日期:2013-11-20 23:41:20双子座
日期:2014-06-11 17:20:43戌狗
日期:2014-06-16 11:05:00处女座
日期:2014-07-22 17:30:47狮子座
日期:2014-07-28 15:38:17金牛座
日期:2014-08-05 16:34:01亥猪
日期:2014-08-18 13:34:25白羊座
日期:2014-09-02 15:03:55金牛座
日期:2014-11-10 10:23:58处女座
日期:2014-12-02 09:17:52程序设计版块每日发帖之星
日期:2015-06-16 22:20:002015亚冠之塔什干火车头
日期:2015-06-20 23:28:22
发表于 2014-09-09 20:21 |显示全部楼层
回复 65# damcool

呵呵~
   

论坛徽章:
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
发表于 2014-09-09 22:56 |显示全部楼层
回复 54# damcool


    哦,看过了,不能处理科学记数法,也进行了重排(这应该也原始的要求不符吧)。

    只有SS的awk方法结果是正确的。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2014-09-10 11:14 |显示全部楼层
本帖最后由 damcool 于 2014-09-10 11:28 编辑
blackold 发表于 2014-09-09 22:56
回复 54# damcool


我知道怎么回事了,原来你不看代码,看结果的。
  1. > cat /tmp/sort.txt
  2. -        11         -        0
  3. 40         12         -        0
  4. -        12         -        0
  5. 37         13         -        0
  6. -        13         -        -
  7. -        14         -        -
  8. -        15         -        -
  9. 50         -        0         -
  10. 49         -        3         0
  11. 48         -        0         23
  12. 47         -        3         0
  13. 46         -        0         3
  14. -45         -        -        2
  15. 5.3400000000e+11         -        -        0
  16. 43         -        -        3
  17. 42         -        -        2
  18. 41         -        -        2
  19. 39         -        43         0
  20. 38         -        -        -
  21. 36         -        54         3
  22. 35         -        -        3
  23. 34         -        4         -
  24. 33         -        -        -
  25. 5.3400000000e-11         -        -        0
  26. -        -        25         0
  27. -        -        24         0
  28. -        -        23         0
  29. -        -        22         0-        -        -        5
  30. -        -        -        4
  31. -        -        -        2
  32. -        -        -        4
复制代码
  1. sort -g /tmp/sort.txt |awk '{k=0;for(i=1;i<=NF;i++) k=(k>i-2 && $i=="-")?k+1:k;a[p++]=k":"$0}END{for (i=0;i<=NF;i++) {for(j=0;j<p;j++) if (match(a[j],i":")) print substr(a[j],index(a[j],":")+1)}}'
复制代码
  1. -45         -        -        2
  2. 5.3400000000e-11         -        -        0
  3. 33         -        -        -
  4. 34         -        4         -
  5. 35         -        -        3
  6. 36         -        54         3
  7. 37         13         -        0
  8. 38         -        -        -
  9. 39         -        43         0
  10. 40         12         -        0
  11. 41         -        -        2
  12. 42         -        -        2
  13. 43         -        -        3
  14. 46         -        0         3
  15. 47         -        3         0
  16. 48         -        0         23
  17. 49         -        3         0
  18. 50         -        0         -
  19. 5.3400000000e+11         -        -        0
  20. -        11         -        0
  21. -        12         -        0
  22. -        13         -        -
  23. -        14         -        -
  24. -        15         -        -
  25. -        -        22         0
  26. -        -        23         0
  27. -        -        24         0
  28. -        -        25         0
  29. -        -        -        2
  30. -        -        -        4
  31. -        -        -        4
  32. -        -        -        5
复制代码
多列测试
  1. 79      -       -       -       -       43      -
  2. -       12      78      64      -       -       -
  3. -       74      56      -       52      -       -
  4. -       -       18      -       -       -       25
  5. -       76      -       94      -       -       -
  6. 59      -       -       18      -       -       -
  7. -       71      34      -       31      59      1
  8. -       -       48      -       -       87      -
  9. -       67      -       23      22      15      41
  10. -       35      74      95      76      22      36
  11. -       34      -       38      -       -       -
  12. 34      -       -       -       -       81      92
  13. -       49      -       51      90      -       -
  14. -       -       -       -       21      58      -
  15. -       73      -       -       -       -       -
  16. -       -       61      -       83      93      71
  17. 50      -       15      81      -       -       -
  18. 61      -       -       -       85      73      -
  19. 62      33      52      -       86      -       92
  20. 48      31      97      -       28      -       -
复制代码
  1. 34      -       -       -       -       81      92
  2. 48      31      97      -       28      -       -
  3. 50      -       15      81      -       -       -
  4. 59      -       -       18      -       -       -
  5. 61      -       -       -       85      73      -
  6. 62      33      52      -       86      -       92
  7. 79      -       -       -       -       43      -
  8. -       12      78      64      -       -       -
  9. -       34      -       38      -       -       -
  10. -       35      74      95      76      22      36
  11. -       49      -       51      90      -       -
  12. -       67      -       23      22      15      41
  13. -       71      34      -       31      59      1
  14. -       73      -       -       -       -       -
  15. -       74      56      -       52      -       -
  16. -       76      -       94      -       -       -
  17. -       -       18      -       -       -       25
  18. -       -       48      -       -       87      -
  19. -       -       61      -       83      93      71
  20. -       -       -       -       21      58      -
复制代码

论坛徽章:
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
发表于 2014-09-10 11:17 |显示全部楼层
回复 68# damcool


    肯定是先看结果啊,还看代码,蛋疼时有这种可能。

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
发表于 2014-09-10 11:30 |显示全部楼层
blackold 发表于 2014-09-10 11:17
回复 68# damcool

原来你蛋疼时会看代码,不是看医生!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP