【发布时间】:2015-12-06 20:34:20
【问题描述】:
过滤文件中与约 20,000 个组合之一匹配的行的最佳方法是什么?模式是 \tZZZZ\t 其中 ZZZZ 是我创建的列表中的数字。
我一直在使用:
for i in `cat patterns.txt`;
do
echo "$i
cat large_file.txt | LC_ALL=C grep $i >> matched_lines.txt
done
但它似乎很慢。 Python 实现也非常慢...
大文件如下所示(制表符分隔,3 列):
31599 94722 0.0184520931023
31599 33175 0.021944980284
31599 95587 0.0181413842575
31599 93637 0.0184741548464
31599 32411 0.0122635750533
31599 55509 0.0145808169111
【问题讨论】:
-
您应该为一些模式提供一个示例,并向我们展示一些可以在您的大文件中找到的行
-
模式可以表示为一组正则表达式吗? (.*)((pattern1)|(pattern2)|...)(.*) 然后在每一行上做一个正则表达式匹配?
-
大文件看起来像上面的编辑,所有模式都从第二列中选择某些数字(文件是制表符分隔的)...
-
@sanchitarora 我不认为这些模式可以这样表示,因为它们本质上都是从第二列中选择一组给定的数字......
-
来自 grep 手册页:“fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即它不解释正则表达式)。”也许您想要“fgrep -f patterns.txt large_file.txt >matched_lines.txt”之类的东西?