在大文件中使用 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
请参阅 了解处理它们的替代方法。
这是我的命令:
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
请参阅