Defina a diferença entre dois arquivos no unix

6

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?

    
por Ajay Nair 19.03.2014 / 16:02

2 respostas

4
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.

    
por 19.03.2014 / 16:08
10

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.

    
por 19.03.2014 / 16:34

Tags