免费注册 查看新帖 |

Chinaunix

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

[文本处理] 码农的欧洲杯:欢迎各路神仙和高手挑战! [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 09:55:28IT运维版块每日发帖之星
日期:2016-07-29 06:20:00
31 [报告]
发表于 2012-06-04 16:13 |只看该作者
开眼了,awk居然这么强悍

论坛徽章:
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
32 [报告]
发表于 2012-06-04 17:36 |只看该作者
awk啊数据库什么的都有人用了,想纯用 sed 吧,也不够级别……那就用胶水**吧:
  1. #!/bin/bash
  2. # 创建者:seesea2517@gmail.com
  3. # 日 期:2012-06-04

  4. declare -r FILE_NAME=name.txt

  5. # 1.年纪最小的人
  6. youngest()
  7. {
  8.     sed -nr 's/.*aged ([0-9]*).*/\1/;T;p' $FILE_NAME | sort | head -1
  9. }

  10. # 2.年纪最大的人
  11. oldest()
  12. {
  13.     sed -nr 's/.*aged ([0-9]*).*/\1/;T;p' $FILE_NAME | sort | tail -1
  14. }

  15. # 3.哪一天出生的人最多
  16. birth_most()
  17. {
  18.     sed -nr 's/.*\([0-9]*-([0-9]*-[0-9]*)\).*/\1/;T;p' $FILE_NAME | sort | uniq -c | sort | tail -1
  19. }

  20. # 4.和你生日相同的人,如果有的话找出来
  21. same_birthday()
  22. {
  23.     read -p"Input your birthday(MM-DD/YYYY-MM-DD): " birthday
  24.     grep "$birthday)" $FILE_NAME
  25. }

  26. # 5.给定一个球员名,列出国籍与教练,处在哪个小组
  27. find_player_info()
  28. {
  29.     read -p"Input player name: " player
  30.     sed -nr "/Group/{h;b}; /Head coach/{H;b}; /$player/{g; P; s/\r//g; :a; s/\n\n/\n/g; ta; s/.*\n([^\n]+)\n([^\n]+)[\n]*/Country: \1\n\2/; p; q}; /^$|^ /b; H;" $FILE_NAME
  31. }

  32. # 6.哪个俱乐部的人最多
  33. club_most_player()
  34. {
  35.     sed -nr 's/.*age.*\) (.*)/\1/;T;p' $FILE_NAME | sort | uniq -c | sort -n | tail -1
  36. }
  37. # 7.队长里打什么位置的最多
  38. most_pos_of_leader()
  39. {
  40.     sed -nr 's/\W+[0-9]+\W+([A-Z]+)\W+.*\(c\).*/\1/;T;p' name.txt | sort | uniq -c | sort -n | tail -1
  41. }

  42. # 8.比你年纪大的有多少人
  43. older_than_you()
  44. {
  45.     read -p"Input your age: " age
  46.     sed -nr 's/.*aged ([0-9]*).*/\1/;T;p' $FILE_NAME | sort | grep -wE "$(seq -s'|' $age 999 )" | wc -l
  47. }

  48. # 9.列出365天里所有人都不过生日的日期
  49. # 看到 rdcwayx 的日期处理方法,感觉这就是终极的计算日期的方案了,不再想动脑子了……人就是这么懒嘛?
  50. list_no_birthday()
  51. {
  52.     total_date=""
  53.     for ((i = 0; i < 366; ++i ));
  54.     do
  55.         total_date="$total_date\n$(date -d"Jan 1 +$i days" +%m-%d)";
  56.     done;

  57.     birthday=$(sed -nr 's/.*\([0-9]*-([0-9]*-[0-9]*)\).*/\1/;T;H;${g;s/\n/\|/g;p}' name.txt)

  58.     echo -ne $total_date | grep -v $birthday
  59. }

  60. # 10.打各个位置的人一共有多少
  61. pos_stat()
  62. {
  63.     sed -nr 's/\W+[0-9]+\W+([A-Z]+)\W+(.*)\W+.*/\1/;T;p' $FILE_NAME | sort | uniq -c | sort -n
  64. }

  65. # 主函数
  66. main()
  67. {
  68.     local ar_menu=(
  69.         "1.年纪最小的人"
  70.         "2.年纪最大的人"
  71.         "3.哪一天出生的人最多"
  72.         "4.和你生日相同的人,如果有的话找出来"
  73.         "5.给定一个球员名,列出国籍与教练,处在哪个小组"
  74.         "6.哪个俱乐部的人最多"
  75.         "7.队长里打什么位置的最多"
  76.         "8.比你年纪大的有多少人"
  77.         "9.列出365天里所有人都不过生日的日期"
  78.         "10.打各个位置的人一共有多少"
  79.         "11.退出"
  80.     )

  81.     local ar_func=(
  82.         youngest
  83.         oldest
  84.         birth_most
  85.         same_birthday
  86.         find_player_info
  87.         club_most_player
  88.         most_pos_of_leader
  89.         older_than_you
  90.         list_no_birthday
  91.         pos_stat
  92.         return
  93.     )

  94.     echo "选择功能:"
  95.     select item in ${ar_menu[@]}
  96.     do
  97.         if [ ! -z "$item" ]
  98.         then
  99.             eval ${ar_func[$(( ${item%%.*} - 1 ))]}
  100.         fi
  101.     done
  102. }

  103. main
复制代码

论坛徽章:
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
33 [报告]
发表于 2012-06-04 17:37 |只看该作者
咦?有敏感词!

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
34 [报告]
发表于 2012-06-04 18:03 |只看该作者
回复 32# mpstat


    我不是楼主啊。。。。我表示脚本没什么注释的~~  帮忙看看 有没有bug哈。。。

论坛徽章:
0
35 [报告]
发表于 2012-06-04 21:07 |只看该作者
                                                                                                         

论坛徽章:
1
摩羯座
日期:2015-01-08 14:01:55
36 [报告]
发表于 2012-06-05 09:50 |只看该作者
这个题目有意思,我也觉得awk用着方便

论坛徽章:
0
37 [报告]
发表于 2012-06-05 10:10 |只看该作者
膜拜大牛们

论坛徽章:
0
38 [报告]
发表于 2012-06-05 10:21 |只看该作者
楼主真厉害!

论坛徽章:
7
双子座
日期:2013-09-09 15:55:31CU大牛徽章
日期:2013-09-18 15:22:06CU大牛徽章
日期:2013-09-18 15:22:20CU大牛徽章
日期:2013-09-18 15:22:26CU大牛徽章
日期:2013-09-18 15:22:31CU大牛徽章
日期:2013-09-18 15:22:37CU大牛徽章
日期:2013-09-18 15:22:46
39 [报告]
发表于 2012-06-05 11:36 |只看该作者
各位大神威武,AWK用的出神入化,是我的话就上PERL了。

论坛徽章:
0
40 [报告]
发表于 2012-06-08 20:08 |只看该作者
1112222
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP