awk 'NR==FNR {key[$1]; next} !($1 in key)' setA setB
1 123
3 def
Que lê o primeiro arquivo e armazena os "ids" na matriz "key", então ele só imprime a partir do segundo arquivo se o id não estiver na matriz de chaves.
Estou procurando uma maneira eficiente de obter a diferença entre dois arquivos. Eu sei que grep -vxF -f setA setB
me dá B - A. Isso é o que eu quero, mas meus arquivos são os seguintes:
setA:
2
4
5
6
set B:
1 123
2 abc
3 def
4 hij
Eu quero que a diferença definida seja calculada com base na primeira coluna do conjunto B; daqui a saída esperada para B-A seria:
1 123
3 def
Quaisquer sugestões sobre como conseguir isso?
Normalmente, é para isso que join
:
join -v2 a b
Isso está unindo os arquivos na primeira coluna (que é assumida como ordenada lexicograficamente), e imprime as linhas do segundo arquivo que não estão emparelhadas.