• 热门搜索:
  • 装机系统
  • 雨林木风系统
  • 深度系统
  • 电脑公司系统
  • win7装机版
  • 教程分类
    当前位置:主页 > 教程咨询 > Linux教程

    何不 Ack?Grep, Ack, Ag的搜索效率对比

    来源:装机员┆发布时间:2017-10-12 00:04┆点击:

    装机员为您提供何不 Ack?Grep, Ack, Ag的搜索效率对比的文章咨询供您阅读,如何使用何不 Ack?Grep, Ack, Ag的搜索效率对比的方法对您有帮助也请您举手之劳分享给您身边的人。

    我(@董伟明9 )经常看到很多程序员, 运维在代码搜索上使用ack, 甚至ag(the_silver_searcher ), 而我工作中95%都是用grep,剩下的是ag。 我觉得很有必要聊一聊这个话题。

    我以前也是一个运维, 我当时也希望找到最好的最快的工具用在工作的方方面面。 但是我很好奇为什么ag和ack没有作为linux发行版的内置部分。 内置的一直是grep。 我当初的理解是受各种开源协议的限制, 或者发行版的boss个人喜好。 后来我就做了实验, 研究了下他们到底谁快。 当时的做法也无非跑几个真实地线上log看看用时。 然后我也有了我的一个认识: 大部分时候用grep也无妨, 日志很大的时候用ag。

    ack原来的域名是betterthangrep.com, 现在是beyondgrep.com。 好吧,其实我理解使用ack的同学, 也理解ack产生的原因。 这里就有个故事。

    何不 Ack?Grep, Ack, Ag的搜索效率对比

    最开始我做运维使用shell, 经常做一些分析日志的工作。 那时候经常写比较复杂的shell代码实现一些特定的需求。 后来来了一位会perl的同学。 原来我写shell做一个事情, 写了20多行shell代码, 跑一次大概5分钟, 这位同学来了用perl改写, 4行, 一分钟就能跑完。 亮瞎我们的眼, 从那时候开始, 我就觉得需要学perl,以至于后来的python。

    perl是天生用来文本解析的语言, ack的效率确实很高。 我想着可能是大家认为ack要更快更合适的理由吧。 其实这件事要看场景。 我为什么还用比较’土’的grep呢?

    看一下这篇教程, 希望给大家点启示。不耐烦看具体测试过程的同学,可以直接看结论:

    在搜索的总数据量较小的情况下, 使用grep, ack甚至ag在感官上区别不大

    搜索的总数据量较大时, grep效率下滑的很多, 完全不要选

    ack在某些场景下没有grep效果高(比如使用-v搜索中文的时候)

    在不使用ag没有实现的选项功能的前提下, ag完全可以替代ack/grep

    实验条件

    PS: 严重声明, 本实验经个人实践, 我尽量做到合理。 大家看完觉得有异议可以试着其他的角度来做。 并和我讨论。

    我使用了公司的一台开发机(gentoo)

    我测试了纯英文和汉语2种, 汉语使用了结巴分词的字典, 英语使用了miscfiles中提供的词典

    # 假如你是Ubuntu: sudo apt-get install miscfiles

    wget https://raw.githubusercontent.com/fxsjy/jieba/master/extra_dict/dict.txt.big

    实验前的准备

    我会分成英语和汉语2种文件, 文件大小为1MB, 10MB, 100MB, 500MB, 1GB, 5GB。 没有更多是我觉得在实际业务里面不会单个日志文件过大的。 也就没有必要测试了(就算有, 可以看下面结果的趋势)。用下列程序深入测试的文件:

    cat make_words.py

    # coding=utf-8

    import os

    import random

    from cStringIO importStringIO

    EN_WORD_FILE ='/usr/share/dict/words'

    CN_WORD_FILE ='dict.txt.big'

    with open(EN_WORD_FILE)as f:

    EN_DATA = f.readlines()

    with open(CN_WORD_FILE)as f:

    CN_DATA = f.readlines()

    MB = pow(1024,2)

    SIZE_LIST =[1,10,100,500,1024,1024*5]

    EN_RESULT_FORMAT ='text_{0}_en_MB.txt'

    CN_RESULT_FORMAT ='text_{0}_cn_MB.txt'

    def write_data(f, size, data, cn=False):

    total_size =0

    while1:

    s =StringIO()

    for x in range(10000):

    cho = random.choice(data)


    以上就是装机员给大家介绍的如何使用何不 Ack?Grep, Ack, Ag的搜索效率对比的方法了,如何使用何不 Ack?Grep, Ack, Ag的搜索效率对比的方法到这里也全部结束了相信大家对如何使用何不 Ack?Grep, Ack, Ag的搜索效率对比的方法都有一定的了解了吧,好了,如果大家还想了解更多的资讯,那就赶紧点击装机员系统官网吧。

    本文来自装机员www.zhuangjiyuan.com如需转载请注明!

    Tag标签| RSS订阅 | 网站地图
    装机员系统之家提供win7装机版xp系统下载win7系统下载、最新Windows10系统下载,专为装机修机员奉上最好的软件、系统、U盘pe、程等平台
    请勿发布违反国家法律法规的内容,会员观点不代表本站立场.本站发布的系统与软件仅为个人学习测试使用,请在下载后24小时内删除,不得用于任何商业用途,
    否则后果自负,请支持购买微软正版软件! 如侵犯到您的权益,请及时通知我们,我们会及时处理。 粤ICP备15116662号