繁体   English   中英

比较Unix中的两个大文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM