Se eu entendi corretamente, você deseja imprimir uma linha do arquivo2 se o 3º campo for diferente da entrada correspondente no arquivo1. Se assim for, isso deve ser feito:
awk 'BEGIN{FS="|"} NR==FNR{a[$1,$2]=$3;next}(a[$1,$2]!=$3)' file1 file2
O seu não estava funcionando porque você estava aceitando $3
, pois a chave do array a
e $3
não é única (tanto equator
quanto globe
estão presentes nos dois arquivos).
Concordo com @drewbenn que tanto grep
quanto join
são mais simples para esse caso em particular, mas aqui está uma maneira Perl de fazer a mesma coisa:
perl -laF'\|' -ne '($k{$F[0].",".$F[1]}||=$F[2]) eq $F[2]||print;' file1 file2