file1 = 95000
file2 = 4500000
我想过滤掉file2中的file1条目。
egrep -f file1 file2
需要很长时间才能完成。 还有其他选择吗? SED? AWK?
由于
答案 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的命令行完成所有这些工作。