perl – grep在大文件上表现不佳,还有其他选择吗?

前端之家收集整理的这篇文章主要介绍了perl – grep在大文件上表现不佳,还有其他选择吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个差异,基本上等于额外的唯一线或在文件中移动的线,因此他们的行号已经改变.为了确定什么是真正的新增加,我运行这个小的perl片段来将“已解析”的行与“未解析的”行分开:
perl -n -e'
    /^\-([^\-].*?)\([^,\(]+,\d+,\d+\).*$/ && do { print STDOUT "$1\n"; next; };
    /^\+([^\+].*?)\([^,\d+\).*$/ && do { print STDERR "$1\n"; next; };
' "$delta" 1>resolved 2>unresolved

事实上这很快就完成了工作,将6000行差异分成两个3000行文件,删除了对行号和统一差异装饰的任何引用.接下来是grep命令,似乎在100%cpu上运行了将近9分钟(真实):

grep -v -f resolved unresolved

这基本上是从未解析的文件删除所有已解析的行. 9分钟后的输出恰好是9行输出 – 独特的添加或未解析的行.

首先,当我过去使用grep时,它已经相当不错了,那么为什么在这种情况下它会非常慢并且cpu很饿?

其次,是否有更有效的替代方法从一个文件删除包含在另一个文件中的行?

解决方法

Grep可能完全解析该文件,因为它被告知要查找的每一场比赛.您可以尝试“fgrep”(如果它存在于您的系统上)或grep -F(如果它不存在),这迫使grep使用Aho-Corasick字符串匹配算法( http://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_string_matching_algorithm),该算法尝试同时匹配所有字符串,只需要一个文件的贯穿.
原文链接:https://www.f2er.com/Perl/171653.html

猜你在找的Perl相关文章