Awk 比较两个文件中的字段,只写入缺少的或不同的字段

Awk 比较两个文件中的字段,只写入缺少的或不同的字段,awk,Awk,我准备了两个LDIF输出,每行用|分隔一个对象,所有属性字段都已排序。 我想写第一个字段包含dn:当第二个文件中缺少一个字段或具有不同的值时。如果缺少标记,我需要添加标记,如果不同,则需要替换标记。如果所有字段都相同,则不应写入任何内容。 我的脚本有两个循环,可以正常工作,但速度会减慢数百万行。我现在正在用awk尝试这个,但我不知道如何将2个文件与它进行比较 文件1 文件2 需要的产出 带有dn的行:abc在两个文件中都是相同的,所以它不会写入输出文件。 行dn:xyz有差异,所以我需要第一个字

我准备了两个LDIF输出,每行用|分隔一个对象,所有属性字段都已排序。 我想写第一个字段包含dn:当第二个文件中缺少一个字段或具有不同的值时。如果缺少标记,我需要添加标记,如果不同,则需要替换标记。如果所有字段都相同,则不应写入任何内容。 我的脚本有两个循环,可以正常工作,但速度会减慢数百万行。我现在正在用awk尝试这个,但我不知道如何将2个文件与它进行比较

文件1

文件2

需要的产出

带有dn的行:abc在两个文件中都是相同的,所以它不会写入输出文件。
行dn:xyz有差异,所以我需要第一个字段包含dn:xyz。下一个字段属性a:10是相同的,因此不执行任何操作。文件2中缺少下一个字段,我需要添加属性b:11。最后一个字段attribute c:在两个文件中,但在文件2中的值不同,我需要将attribute c:12替换为文件1中的值。

这不是问题的直接答案,但是,从注释来看,要比较的文件似乎是从标准LDIF格式的文件创建的

已有工具可以获取两个LDIF文件并输出协调它们所需的更改。例如:

在opendj ldap工具包包中提供ldifdiff 这是一个围棋工具 是一个未维护的Perl脚本,用于在两个LDIF文件之间生成差异 -另一个Perl脚本 其中一种工具可能比从头开始的新工具更可靠

本地设计院(LDIF)的一些背景资料,包括变更记录:


很抱歉,我现在没有这样做,我现在已经接受了另一个问题的解决方案,请将您的脚本包括在问题中,这样我们也许可以找到为什么它如此缓慢,并告诉您如何改进它。您可以使用多种工具,如grep和awk,具体取决于最终目的。我认为awk在提供信息方面有更大的灵活性。一个简单的grep-v-F-F文件.2文件.1通常是不够清晰的,而且这个示例并不能清楚地反映所有的需求。请考虑更详细的示例并发布一些工作。DN:ABC,DN:XYZ等在两个文件中按相同的顺序排序吗?如果dn:abc存在于文件1中,它是否存在于文件2中?文件2是否可以包含文件1中不存在的dn:pqr?
dn:abc|attribut a: 10|attribut b: 11|attribut c: 12
dn:xyz|attribut a: 10|attribut b: 11|attribut c: 12
dn:abc|attribut a: 10|attribut b: 11|attribut c: 12
dn:xyz|attribut a: 10|attribut c: 11
dn:xyz|add attribute b: 11|replace attribute c: 12