在大文件中使用 AWK 从文件中删除行失败

Removing lines from file using AWK fails in large files

这是我的命令:

awk 'FNR==NR{arr[];next}!( in arr)' supp.txt data.txt > res.txt

其中 supp.txt 的内容类似于:

hash1
hash2
hash3

和data.txt:

8723 email hash1
8724 email hash4
8725 email hash5

值不同,文件最大可达 1Gb, res.txt 应该有 data.txt 减去 supp.txt

中存在的行

所以res.txt应该是这样的:

8724 email hash4
8725 email hash5

这对小文件工作得很好,但是文件大到 10Mb 就会失败,没有任何错误消息,该函数只是将 data.txt 复制到 res.txt,允许来自 [=32= 的值] 即使它们应该被删除。

为什么会这样?解决方法是什么?

我学习了 AWK 基础知识,这帮助我理解了命令,但仅此而已 我用谷歌搜索了这个问题,但没有找到类似的运气 我确保我有足够的内存以防万一

如果问题是 DOS 行结尾,则:

awk '{sub(/\r$/,"")} FNR==NR{arr[];next}!( in arr)' supp.txt data.txt > res.txt

请参阅 了解处理它们的替代方法。