【问题标题】:Why is Ag slower than grep?为什么 Ag 比 grep 慢?
【发布时间】:2016-09-25 17:13:08
【问题描述】:

所以最近我正在搜索执行快速搜索的命令行工具,我偶然发现了很多。据我了解,据报道 Ag 比 grep、ack 和 sift 快。 grep 是最慢的。

现在我在一个文件中有 300.000 个字符串,我尝试找出哪些字符串具有特定的子字符串并将它们返回。

time grep 'substring' file.txt

real    0m0.030s
user    0m0.009s
sys     0m0.008s

time ag 'substring' file.txt ----> 5 secs

real    0m0.083s
user    0m0.038s
sys     0m0.014s

是我做错了什么,还是没有按照我尝试使用的方式使用 ag?

【问题讨论】:

  • 这里的一个关键考虑是这两个命令行调用实际上并没有做同样的事情。 ag 调用执行不区分大小写的匹配 计算行数; grep 两者都不做。
  • @ThomasOrozco 但 ag 被描述为“grep 的更快替代品”.. 如果 ag 的功能与 grep 的不同.. 那么 ag 在什么方面更快?
  • Ag 是为搜索代码库而设计的。它比 grep 更快,因为它更有效地定位应搜索的文件并对其进行聚合处理等。换句话说,grep 和 Ag 是用于不同目的的不同工具。您提供的人为示例只是 grep 闪耀而 Ag 没有的示例。关于这个话题有很多话要说,而且真的没有一个简短的答案。 This blog post(专注于另一个工具:rg)很好地研究了确定“更快”意味着什么的复杂性。

标签: grep ack ag


【解决方案1】:

Grep 真的很高效。然而,即使 Ag 在一个系统上更快,这一切都取决于您使用的软件包和发行版。

如果您在 grep(在 Cygwin 软件包上)上使用 64 位,则可以在系统上使用更多内存。可能是 Ag 有一个使用较少资源的包。

我建议使用parallel 命令,它允许您指定每个核心使用多少进程并加快处理速度。

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2011-11-19
    • 2016-12-06
    • 2019-12-18
    • 2015-10-04
    相关资源
    最近更新 更多