当前位置: 首页 > 面试题库 >

如何有效使用grep?

满自明
2023-03-14
问题内容

我有大量要搜索的小文件。我一直在寻找一个良好的事实上的多线程版本,grep但找不到任何东西。如何改善grep的用法?截至目前,我正在这样做:

grep -R "string" >> Strings

问题答案:

如果在多核处理器上安装了xargs,则可以从以下内容中受益,以防万一有人感兴趣。

环境:

Processor: Dual Quad-core 2.4GHz
Memory: 32 GB
Number of files: 584450
Total Size: ~ 35 GB

测试:

1.找到必要的文件,将它们通过管道传递到xargs,并告诉它执行8个实例。

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P8 grep -H "string" >> Strings_find8

real    3m24.358s
user    1m27.654s
sys     9m40.316s

2.找到必要的文件,将它们通过管道传递到xargs,并告诉它执行4个实例。

time find ./ -name "*.ext" -print0 | xargs -0 -n1 -P4 grep -H "string" >> Strings

real    16m3.051s
user    0m56.012s
sys     8m42.540s

3. @Stephen建议:找到必要的文件并使用+代替xargs

time find ./ -name "*.ext" -exec grep -H "string" {} \+ >> Strings

real    53m45.438s
user    0m5.829s
sys     0m40.778s

4.常规递归grep。

grep -R "string" >> Strings

real    235m12.823s
user    38m57.763s
sys     38m8.301s

就我的目的而言,第一个命令工作得很好。



 类似资料:
  • 问题内容: 我必须处理一个很大的结果集(可能是数十万行,有时更多)。 不幸的是,它们需要一次全部检索(在启动时)。 我正在尝试通过使用尽可能少的内存来做到这一点。 通过查看SO,我发现使用可能是我想要的,但我仍然不太了解如何正确使用它们。 正在做一个从基光标或SScursor相同的(在内存使用的术语)? 我可以一排(或几排)从sscursor的行中“流化” 吗?如果是,这样做的最佳方法是什么? 问

  • 产品用例——我们的产品有一个典型的用例,我们将有n个用户。每个用户将有n个工作流,每个工作流可以在任何时间运行(n次)。 我希望这是任何工作流产品的典型用例。 我可以使用域来区分用户吗(我的意思是说为每个用户创建一个域)? 我可以为每个用户创建一个WorkflowClient来服务他所有的工作流执行吗?或者对于每个请求,我需要创建一个工作流客户端吗?哪一个是推荐的方法? 创建工作对象以轮询任务列表

  • 问题内容: 我使用绑定框架已有一段时间了,我想知道您如何处理这种情况。 您的报纸有一些属性,例如 (字符串)标题 (布尔值)已发布 (日期)发布日期 在您看来,您拥有一份报纸列表,可以同时对其进行全部编辑。这意味着您可以在单个请求中更改所有newspape的标题或“已发布”的所有状态。 问题在于,当我们使用绑定框架时,​​您将有点像编辑数据库中的数据一样编辑报纸的数据…将每个值彼此独立地绑定到字段

  • 问题内容: 注意:纯粹出于好奇而不是用于任何实际用例。 我想知道是否有一种方法可以 使用有效的类型参数声明对象: 如果和是可以互换的,为什么和不呢? 编辑: 问题可以推广到嵌套原始类型参数的问题。例如: 编辑2: 我应该稍微改一下这个问题:我知道 是有效的,但我想知道为什么与 问题答案: 泛型有一些相当严重的局限性。在这种情况下,您不能将类型分配给内部类型,因为您实际上是在引用原始类型,而不是原始

  • 问题内容: 我对angularjs很陌生。说我的应用程式有表格。使用检查器,我注意到,如果angularjs认为该表单无效,则会向该表单添加ng- invalid类。可爱。 因此,似乎为了检查表单是否有效,我需要使用Jquery选择器来污染我的代码吗?不使用表单控制器来指示表单有效性的angularjs方法是什么? 问题答案: 当您将标签放入ngApp时,AngularJS会自动添加表单控制器(实

  • 问题内容: 我最近了解了Java 1.5功能,并开发了一个示例代码来使用它。我的目标是在线程由于未捕获的异常而死亡时重新启动线程。 在这里,文件阅读器仅包含用于读取文件和打印内容的例程。我通过使该类内的文件名为空来模拟未捕获的异常。 然后,我的CustomExceptionHandler类如下。 但是在这里我发现了一个问题。在未捕获的异常之后,线程处于睡眠状态。我通过使用探查器进行了验证。因此,创