免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3192 | 回复: 10
打印 上一主题 下一主题

[shell] 文本块排序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-05 17:35 |只看该作者 |倒序浏览
朋友们请问我想用脚本实现这个功能该如何做呢?

待排序的文件
[root@shell /]# cat PROFESSOR.db
J Luo
Southeast University
Nanjing,China

Y Zhang
Victory University
Melbourne, Australia

D Hou
Beijing University
Beijing,China

B Liu
Shanghai Jiaotong University
Shanghai,China

C Lin
University of Toronto
Toronto,Canada

要求:对文本块根据学校的名字(每个文本块的第二行)进行排序,结果仍然能以文本块的格式输出。
没有思路,不知道怎么做?

论坛徽章:
0
2 [报告]
发表于 2012-06-05 17:46 |只看该作者
  1. awk 'BEGIN{RS="";FS="\n"}{a[$2]=$0}END{l=asorti(a,b);for(i=l;i>0;i--) print a[b[i]]"\n"}'
  2. 要的这种吗?
复制代码

论坛徽章:
8
摩羯座
日期:2014-11-26 18:59:452015亚冠之浦和红钻
日期:2015-06-23 19:10:532015亚冠之西悉尼流浪者
日期:2015-08-21 08:40:5815-16赛季CBA联赛之山东
日期:2016-01-31 18:25:0515-16赛季CBA联赛之四川
日期:2016-02-16 16:08:30程序设计版块每日发帖之星
日期:2016-06-29 06:20:002017金鸡报晓
日期:2017-01-10 15:19:5615-16赛季CBA联赛之佛山
日期:2017-02-27 20:41:19
3 [报告]
发表于 2012-06-06 08:46 |只看该作者
回复 2# 英语盲学linux


    如果有两个同校的呢?

论坛徽章:
0
4 [报告]
发表于 2012-06-06 09:46 |只看该作者
本帖最后由 personball 于 2012-06-06 09:48 编辑

回复 1# bluesmile11


    比较折腾一点:

  1. $cat sortbyblock
  2. J Luo
  3. Southeast University
  4. Nanjing,China

  5. Y Zhang
  6. Victory University
  7. Melbourne, Australia

  8. D Hou
  9. Beijing University
  10. Beijing,China

  11. B Liu
  12. Shanghai Jiaotong University
  13. Shanghai,China

  14. C Lin
  15. University of Toronto
  16. Toronto,Canada

  17. $awk  'BEGIN{RS="";FS="\n"}{for(i=1;i<=NF;i++)printf $i"* ";print "";}' sortbyblock|sort +2 -3|sed 's/\*\ /\n/g'
  18. D Hou
  19. Beijing University
  20. Beijing,China

  21. B Liu
  22. Shanghai Jiaotong University
  23. Shanghai,China

  24. J Luo
  25. Southeast University
  26. Nanjing,China

  27. C Lin
  28. University of Toronto
  29. Toronto,Canada

  30. Y Zhang
  31. Victory University
  32. Melbourne, Australia
复制代码

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
5 [报告]
发表于 2012-06-06 10:05 |只看该作者
sort 没找到类似 awk RS 的参数,就先把文件转换成一行一个记录再来排序:
  1. # 这个第一行多一个空行,没做处理
  2. [seesea@UC ~]$ sed -n 'H; $ba; /^$/ba; b; :a; x; s/\n/\|/g; p' PROFESSOR.db  | sort -t'|' -k3,3  | tr '|' '\n'

  3. D Hou
  4. Beijing University
  5. Beijing,China


  6. B Liu
  7. Shanghai Jiaotong University
  8. Shanghai,China


  9. J Luo
  10. Southeast University
  11. Nanjing,China


  12. C Lin
  13. University of Toronto
  14. Toronto,Canada

  15. Y Zhang
  16. Victory University
  17. Melbourne, Australia

  18. # 这个没有多的空行了
  19. [seesea@UC ~]$ cat PROFESSOR.db | tr '\n' '|' | sed 's/||/\n/g' | sort -t'|' -k2,2 | sed 's/$/\n/g' | tr '|' '\n'
  20. D Hou
  21. Beijing University
  22. Beijing,China

  23. B Liu
  24. Shanghai Jiaotong University
  25. Shanghai,China

  26. J Luo
  27. Southeast University
  28. Nanjing,China

  29. C Lin
  30. University of Toronto
  31. Toronto,Canada


  32. Y Zhang
  33. Victory University
  34. Melbourne, Australia

复制代码

论坛徽章:
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
6 [报告]
发表于 2012-06-06 10:21 |只看该作者
对二楼稍加修改就解决同校问题了。

论坛徽章:
0
7 [报告]
发表于 2012-06-06 11:44 |只看该作者
本帖最后由 英语盲学linux 于 2012-06-10 14:28 编辑

回复 3# waker
  1. 数组下标改下 比如a[$2NR]
复制代码

论坛徽章:
0
8 [报告]
发表于 2012-06-06 11:46 |只看该作者
谢谢朋友们的解答,学习学习

论坛徽章:
0
9 [报告]
发表于 2012-06-09 20:36 |只看该作者
4, 5 楼是常用的方法,也是为什么除了gawk其他awk都没有实现sort的原因。 重复造轮子没必要,unix sort足矣

论坛徽章:
0
10 [报告]
发表于 2012-06-11 17:56 |只看该作者
回复 4# personball


你好请问
1.sortbyblock
2.|sort +2 -3

请问sort你这些写的意思是什么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP