0

次のように、連想配列 (キー = 値) の形式で 2 つのファイルを記述します。

ファイル A:

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 に答える