以关联数组(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
我不想使用循环,因为这些文件可能很大。
答案 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