在Unix中比较两个巨大的文件

时间:2015-12-21 16:21:29

标签: linux unix awk

要求是比较两个巨大的Unix文件并在搜索几个选项后根据唯一键(第一个字段)在第三个文件中写入差异得到以下命令:

awk 'FNR==NR{a[$0];next}!($0 in a)' hosts.csv masterlist.csv>results.csv

虽然这给出了差异,但是如果对于一个字段,一个文件包含NULL(作为一个单词)而另一个空/空值用于空值,如何在命令中忽略它并比较其他字段?

也想制作一个带有这些选项的通用脚本或实用程序,不需要代码,但只是一个建议会有所帮助。

2 个答案:

答案 0 :(得分:2)

您可以在awk

中尝试此修复
awk 'FNR==NR{if ($0 !~ /NULL|  *|^$/){a[$0]}next}!($0 in a)' hosts.csv masterlist.csv>results.csv

正如@fedorqui在评论中所说,这是另一种选择:

awk 'FNR==NR{if ($0 !~ /NULL/ && NF){a[$0]}next}!($0 in a)' hosts.csv masterlist.csv>results.csv

答案 1 :(得分:0)

尝试使用二进制比较它们。如果将文件压缩为二进制文件(序列化),则可以非常快速地对它们进行比较。如果有差异,你可以浏览文件并使用类似的方法比较它们git ...检查它们的源代码。希望这有帮助