比较两个配置文件(关联数组)的键差异的最快方法

时间:2013-02-06 10:09:37

标签: bash awk

以关联数组(key = value)的形式写两个文件,如:

文件A:

banana=yellow
kiwi=green
tomato=red

文件B:

banana=dislike
tomato=like
pear=like

我想知道比较其键的最佳方法(速度方面):

反对B:

kiwi=green

B对抗A

pear=like

双向

kiwi=green
pear=like

我不想使用循环,因为这些文件可能很大。

3 个答案:

答案 0 :(得分:5)

使用join

反对B:

$ join -t= -j 1 -v 1 <(sort fileA) <(sort fileB) 
kiwi=green

B对抗A:

$ join -t= -j 1 -v 2 <(sort fileA) <(sort fileB) 
pear=like

双向:

$ join -t= -j 1 -v 1 -v 2 <(sort fileA) <(sort fileB) 
kiwi=green
pear=like

答案 1 :(得分:4)

B对抗A

awk -F'=' 'NR==FNR{a[$1]=$0;next}!($1 in a)' A B

A反对B

awk -F'=' 'NR==FNR{a[$1]=$0;next}!($1 in a)' B A

双向

awk -F'=' '{a[$1]++;v[$1]=$0}END{for(i in a)if(a[i]==1)print v[i]}' A B

所有未经测试的,如果不起作用,请告诉我。

答案 2 :(得分:0)

我喜欢dogbane的回答,但是会使用grep和cut提交我糟糕的解决方案:

grep -v -f <(for key in $(cut -d '=' -f 1 fileA); do echo "^$key="; done) fileB