grep -f alt sed?awk?

时间:2011-04-28 06:12:18

标签: sed awk grep

file1 = 95000
file2 = 4500000

我想过滤掉file2中的file1条目。

egrep -f file1 file2

需要很长时间才能完成。 还有其他选择吗? SED? AWK?

由于

2 个答案:

答案 0 :(得分:2)

当然,您可以使用awk。将file2条目放入数组中。然后迭代file1,每次在数组中找到这些条目。

awk 'FNR==NR{a[$0];next}($0 in a)' file2 file1

使用这些选项来获得您想要的内容

awk 'FNR==NR{a[$0];next}(!($0 in a))' file2 file1
awk 'FNR==NR{a[$0];next}(!($0 in a))' file1 file2
awk 'FNR==NR{a[$0];next}($0 in a)' file1 file2

答案 1 :(得分:0)

我认为grep -f真的不适合使用那个大小的过滤器文件,所以某种数据库支持的解决方案可能是你最好的选择。

您可以将这两个文件逐行加载到SQLite数据库中,然后执行类似这样的简单SQL:

SELECT line FROM file2
EXCEPT
SELECT line FROM file1

并将它们转出。你可以直接从SQLite的命令行完成所有这些工作。