以关联数组(键=值)的形式编写两个文件,例如:
档案一:
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
我不想使用循环,因为这些文件可能很大。
使用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
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
所有都没有测试,让我知道它是否不起作用。
我喜欢 dogbane 的回答,但会使用 grep 和 cut 提交我糟糕的解决方案:
grep -v -f <(for key in $(cut -d '=' -f 1 fileA); do echo "^$key="; done) fileB