perl – grep在大文件上表现不佳,还有其他选择吗?
发布时间:2020-12-15 22:00:41 所属栏目:大数据 来源:网络整理
导读:我有一个差异,基本上等于额外的唯一线或在文件中移动的线,因此他们的行号已经改变.为了确定什么是真正的新增加,我运行这个小的perl片段来将“已解析”的行与“未解析的”行分开: perl -n -e' /^-([^-].*?)([^,(]+,d+,d+).*$/ do { print STDOUT "$1
我有一个差异,基本上等于额外的唯一线或在文件中移动的线,因此他们的行号已经改变.为了确定什么是真正的新增加,我运行这个小的perl片段来将“已解析”的行与“未解析的”行分开:
perl -n -e' /^-([^-].*?)([^,(]+,d+,d+).*$/ && do { print STDOUT "$1n"; next; }; /^+([^+].*?)([^,d+).*$/ && do { print STDERR "$1n"; 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),该算法尝试同时匹配所有字符串,只需要一个文件的贯穿.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |