2015-12-21 77 views
1

要求是比较两个巨大的Unix文件,并写入基于搜索几个选项之后唯一的密钥(第一场)在第三档的差异得到了下面的命令:在Unix中比较两个巨大的文件

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

虽然这给出了区别,如果对于一个字段,一个文件包含NULL(作为一个词)和其他空/空值为空值如何忽略这个命令并比较其他字段?

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

+0

是'diff'不是一种选择? –

+1

请发表[mcve],否则这太抽象了,不知道你在找什么。 – fedorqui

+1

@commuSoft:试用sdiff -W ...但是也需要忽略Null。所以检查我们是否有更好的方法 – Vinod

回答

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 
+0

将尝试此操作并更新... – Vinod

+1

您可能会检查'NF'来摆脱空行或仅有空格的行。 – fedorqui

+0

不错的渔获@fedorqui – klashxx