比较2个文件中的字段,只写缺失或不同的字段

时间:2019-02-04 09:18:20

标签: awk

我有2个LDIF输出准备成一行,每个对象用“ |”分隔并且所有属性字段都已排序。 我要写的第一个字段包含dn:当第二个文件中的字段丢失或具有不同的值时。如果丢失,则需要添加标记,如果标记不同,则需要替换标记。如果所有字段都相同,则不应写入任何内容。 我的脚本具有2个循环,但可以减慢数百万行的速度。我现在正在用awk尝试此操作,但是我不知道如何比较2个文件。

文件1

dn:abc|attribut a: 10|attribut b: 11|attribut c: 12
dn:xyz|attribut a: 10|attribut b: 11|attribut c: 12

文件2

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

与dn:abc相同的行在两个文件中均相同,因此未写入输出文件中。 dn:xyz行有区别,因此我需要在第一个字段中包含“ dn:xyz”。下一个字段属性a:10是相同的,所以什么也没做。文件2中缺少下一个字段,我需要“添加属性b:11”。两个文件中都有最后一个字段属性c :,但文件2中的值不同。我需要“替换属性c:12”中文件1的值。

1 个答案:

答案 0 :(得分:0)

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

已经存在一些工具来获取两个LDIF文件并输出所需的更改以使它们协调。例如:

  • OpenDJ在其ldifdiff包中提供了opendj-ldap-toolkit
  • ldifdiff是Go工具
  • ldiff是一个未维护的Perl脚本,用于“生成两个LDIF文件之间的差异”
  • ldap-diff-另一个Perl脚本

其中一种工具可能比从头开始的新工具更可靠。

有关LDIF的一些背景资料,包括变更记录: