在两个文件之间查找属性中的增量

时间:2013-07-08 21:10:26

标签: bash sed diff

这主要是一个方法/概念问题,我感谢你提出的任何意见。

问题: 我经常需要比较和编辑属性文件,这样做我主要想找到新文件中存在的新属性与旧文件相比。为了达到这个目的,我经常使用diff old_file.prop new_file.prop,但是由于每个文件中的行/属性数量很多(~150),这种方法效率不高,容易出错。

示例old_file.prop

name.host=mycomputer1
internal.port=21
external.gateway=sample.my.machine

示例new_file.prop

name.host=change_me
internal.port=21
external.gateway=change_me
external.port=501

此处diff命令将返回:

<name.host=mycomputer1
<external.gateway=sample.my.machine
>name.host=change_me
>externa.gateway=change_me
>external.port=501

此示例中唯一感兴趣/期望的输出是external.port,而不是它保存的值(也可能是行号)。我对sed有点熟悉,但如果没有事先了解新文件中的属性,我认为它不能做到这一点。

有没有办法使用bash脚本有效地实现这一目标?

谢谢,

3 个答案:

答案 0 :(得分:4)

GNU代码

awk -F= 'NR==FNR {a[$1]++;next}; !a[$1] {print $1, "line", FNR}' fileOld fileNew

答案 1 :(得分:2)

作为@ mob的答案的另一种选择,并提供其他一些可能性:

  1. 显示已在new_file中删除的属性

    comm -23 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

  2. 显示已在new_file中添加的属性

    comm -13 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

  3. 显示两个文件中的常用属性

    comm -22 <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

答案 2 :(得分:1)

您可以使用cut忽略每行第一个=后的任何输入:

diff <(cut -d= -f1 old_file) <(cut -d= -f1 new_file)

预计输出:

22a23
> external.port