grep -f 替代 sed?awk?

发布于 2024-11-03 15:20:28 字数 184 浏览 0 评论 0原文

file1 = 95000
file2 = 4500000

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

egrep -f file1 file2

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

谢谢

file1 = 95000
file2 = 4500000

I want to filter out file1 entries from file2.

egrep -f file1 file2

takes ages to complete.
Is there an alternative ? sed? awk?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

长发绾君心 2024-11-10 15:20:28

当然,您可以使用 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

sure, you can use awk. Put file2 entries into an array. Then iterate file1, each time finding those entries in the array.

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

Play around with these options to get what you want

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
撩心不撩汉 2024-11-10 15:20:28

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

您可以将这两个文件逐行加载到 SQLite 数据库中,然后执行一些简单的 SQL 操作,如下所示:

SELECT line FROM file2
EXCEPT
SELECT line FROM file1

然后将它们转储回来。您可以使用 SQLite 直接从命令行完成所有这些操作。

I don't think grep -f is really meant to work with a filter file of that size so some sort of database backed solution might be your best bet.

You could load both files line-by-line into an SQLite database and then do a simple bit of SQL something like this:

SELECT line FROM file2
EXCEPT
SELECT line FROM file1

and dump them back out. You could do all of that straight from the command line with SQLite.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文