0

以关联数组(键=值)的形式编写两个文件,例如:

档案一:

banana=yellow
kiwi=green
tomato=red

文件 B:

banana=dislike
tomato=like
pear=like

我想知道比较他们的密钥的最佳方法(在速度方面):

A对B:

kiwi=green

B 对 A

pear=like

双向

kiwi=green
pear=like

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

4

3 回答 3

5

使用join

A对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
于 2013-02-06T10:26:46.460 回答
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

所有都没有测试,让我知道它是否不起作用。

于 2013-02-06T10:19:41.450 回答
0

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

grep -v -f <(for key in $(cut -d '=' -f 1 fileA); do echo "^$key="; done) fileB
于 2013-02-06T10:38:15.430 回答