[英]Comparing two huge files in Unix
要求是比较两个巨大的Unix文件,并在搜索了以下命令的几个选项后,根据唯一键(第一个字段)在第三个文件中写入差异:
awk 'FNR==NR{a[$0];next}!($0 in a)' hosts.csv masterlist.csv>results.csv
尽管这样做有区别,但是,如果对于一个字段,一个文件包含NULL(作为一个单词),而对于空值,其他文件包含空白/空格,那么如何在命令中忽略此字段并比较其他字段呢?
也希望使用此类选项制作通用脚本或实用程序,不需要代码,只是建议会有所帮助。
您可以在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
尝试使用二进制比较它们。 如果将文件压缩为二进制文件(序列化),则可以非常快速地比较它们。 如果存在差异,则可以遍历文件并使用类似的方法将它们进行比较以进行git ...检查其源代码。 希望这可以帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.