我想在unix中找到文件中的字符串模式.我用下面的命令:
$grep 2005057488 filename
Run Code Online (Sandbox Code Playgroud)
但文件包含数百万行,我有很多这样的文件.除了grep之外,获取模式的最快方法是什么.
Ste*_*eve 18
grep通常和它一样快.它只针对一件事而且只针对一件事 - 而且它做得非常好.你可以在这里阅读原因.
但是,为了加快速度,你可以尝试一些事情.首先,看起来你正在寻找的模式是一个固定的字符串.幸运的是,grep有一个'固定字符串'选项:
-F, --fixed-strings
Interpret PATTERN as a list of fixed strings, separated by newlines, any of which is to be matched. (-F is specified by POSIX.)
Run Code Online (Sandbox Code Playgroud)
其次,由于grep通常是很慢的UTF-8,你可以尝试禁用国家语言支持(NLS)通过设置环境LANG=C.因此,你可以试试这个混合物:
LANG=C grep -F "2005057488" file
Run Code Online (Sandbox Code Playgroud)
第三,这不是你的问题清楚,但如果你只是试图找到某些东西在你的文件存在一次,你也可以尝试加入的最大次数找到格局.因此,何时-m 1,grep在第一次发现后立即退出.您的命令现在看起来像这样:
LANG=C grep -m 1 -F "2005057488" file
Run Code Online (Sandbox Code Playgroud)
最后,如果你有一个多核CPU,你可以给GNU并行.它甚至附带了如何与grep一起使用它的解释.要为每个核心运行1.5个作业并提供1000个参数grep:
find . -type f | parallel -k -j150% -n 1000 -m grep -H -n STRING {}
Run Code Online (Sandbox Code Playgroud)
对于grep并行使用的大文件--pipe:
< bigfile parallel --pipe grep STRING
Run Code Online (Sandbox Code Playgroud)
根据您的磁盘和CPU,读取较大的块可能会更快:
< bigfile parallel --pipe --block 10M grep STRING
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
72167 次 |
| 最近记录: |