免费注册 查看新帖 |

Chinaunix

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

[文本处理] 关于shell 语句执行效率比较 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-06 15:47 |只看该作者 |倒序浏览
本帖最后由 helloiac 于 2014-05-07 11:12 编辑

2013 shell 编程大赛第一题
有一小撮别有用心的人,他们会想办法获取论坛的用户名列表,然后用弱密码逐个尝试每一个用户名。针对这一情况,论坛程序会把每一次登陆失败的记录放在日志里面。请编写脚本找出尝试登陆失败次数最多的 top 10 的IP地址和登陆失败次数。
<?PHP exit;?>        1357510682        oahgpbzzl        rz6***7W                91.224.246.183
<?PHP exit;?>        1357511540        yvbykozi        ZRS***38                188.165.205.101
<?PHP exit;?>        1357511656        AlexanderZS        xV***R3                94.180.210.229
<?PHP exit;?>        1357512059        deefadvirmdak        E9q***kV                111.73.45.49
<?PHP exit;?>        1357513658        michaelkorstian        Vq2***jK                91.224.247.24
<?PHP exit;?>        1357513659        michaelkorsbentian        Vq2***jK                91.224.247.24
<?PHP exit;?>        1357513953        woodhzyl        fK***bc                175.42.46.63
<?PHP exit;?>        1357516630        Cruirmtig        c9q***rZ                128.72.115.220
<?PHP exit;?>        1357516641        payprophare        8Ct***tJ                220.250.58.171
<?PHP exit;?>        1357517851        liszdnjn        ZRS***38                142.4.117.83
<?PHP exit;?>        1357518471        asdfgt26z        fK***bc                58.22.19.16
<?PHP exit;?>        1357518701        lKiSrHkBeR        0w3***uq                27.159.207.4
<?PHP exit;?>        1357518746        zAoPoTeXcL        0w3***uq                27.159.207.4
<?PHP exit;?>        1357518927        asdfgt25w        fK***bc                36.251.6.156
<?PHP exit;?>        1357519355        chuntyaxonync        tgg***9X                117.26.200.33
<?PHP exit;?>        1357519365        xiyjizqv        ZRS***38                192.74.224.245
<?PHP exit;?>        1357521148        asdfgt23a        fK***bc                175.42.46.164
<?PHP exit;?>        1357521210        jeffycf        df22b31d***8d9a3                15.211.201.81
<?PHP exit;?>        1357521220        jeffycf        df22b31d***8d9a3                15.211.201.81
  1. [cbb@ cbb-HP shell-contest]$ ls -sh
  2. total 1.6G
  3. 4.0K 1-1.sh  4.0K 1.sh  4.0K 2.sh  4.0K file.list  1.6G illegal.log  4.0K time.sh  8.0K wls_ms1.out
  4. [cbb@ cbb-HP shell-contest]$ cat 1.sh
  5. #!/bin/bash
  6. time0=`date +%s%N|cut -c 10-13`
  7. awk '{a[$6]++}END{for(i in a)print a[i],i|"sort -n|tail -10"}' illegal.log  
  8. time1=`date +%s%N|cut -c 10-13`
  9. s=$(($time1-$time0))
  10. echo "time is ${s:0:1}.${s:1} sec"
  11. [cbb@ cbb-HP shell-contest]$ cat 1-1.sh
  12. #!/bin/bash
  13. time0=`date +%s%N|cut -c 10-13`
  14. awk '{a[$6]++}END{for(i in a)print a[i],i}' illegal.log |sort -n |tail -10
  15. time1=`date +%s%N|cut -c 10-13`
  16. s=$(($time1-$time0))
  17. echo "time is ${s:0:1}.${s:1} sec"
  18. [cbb@ cbb-HP shell-contest]$ bash 1.sh
  19. 535572 74.91.23.27
  20. 620136 222.186.26.26
  21. 648324 111.73.45.13
  22. 761076 142.4.117.83
  23. 789264 220.250.58.172
  24. 817452 220.250.52.90
  25. 845640
  26. 845640 220.250.58.171
  27. 1014768 220.250.58.170
  28. 1973160 220.250.52.66
  29. time is 4.76 sec
  30. [cbb@ cbb-HP shell-contest]$ bash 1-1.sh
  31. 535572 74.91.23.27
  32. 620136 222.186.26.26
  33. 648324 111.73.45.13
  34. 761076 142.4.117.83
  35. 789264 220.250.58.172
  36. 817452 220.250.52.90
  37. 845640
  38. 845640 220.250.58.171
  39. 1014768 220.250.58.170
  40. 1973160 220.250.52.66
  41. time is 3.72 sec
复制代码
我看到两种不同的写法
  1. awk '{a[$6]++}END{for(i in a)print a[i],i|"sort -n|tail -10"}' illegal.log  
  2. awk '{a[$NF]++}END{for(i in a)print i,a[i]}' illegal.log | sort -nrk +2 |head -10
复制代码
问题:
       为啥第一种写法比第二种写法执行速度慢

论坛徽章:
2
白羊座
日期:2013-11-18 19:52:42辰龙
日期:2014-09-07 07:46:06
2 [报告]
发表于 2014-05-06 15:53 |只看该作者
目测外面会快一点点

论坛徽章:
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
3 [报告]
发表于 2014-05-06 16:14 |只看该作者
咦,有这事?慢多少?会不会只是一两次运行的一点点偶然因素影响的?

论坛徽章:
6
摩羯座
日期:2013-08-24 10:43:10狮子座
日期:2013-08-25 10:27:06天秤座
日期:2013-09-11 20:28:44午马
日期:2014-09-28 16:06:0015-16赛季CBA联赛之八一
日期:2016-12-19 13:55:0515-16赛季CBA联赛之天津
日期:2016-12-20 14:01:23
4 [报告]
发表于 2014-05-06 21:42 |只看该作者
楼主两天命令处理的文本多大?
如果文本很大
第一条命令比第二条命令多了一个判断语句$6,虽然判断很简单,但会根据判断次数累加起来。

论坛徽章:
0
5 [报告]
发表于 2014-05-07 11:14 |只看该作者
回复 4# cao627
即使去掉了多加的$6判断也还是比较慢,看我的顶楼的测试

   

论坛徽章:
0
6 [报告]
发表于 2014-05-09 00:11 |只看该作者
为啥不用time awk...来测时间,而要自己写一个取命令执行时间的脚本?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP