Para usar join
, você precisa se certificar de que FILE1 e FILE2 sejam classificados nos campos de associação.
O seguinte comando deve fazer o truque:
join -v1 <(sort file1.txt) <(sort file2.txt)
Eu tenho arquivos de texto longos com campos delimitados por espaço:
cat file1.txt
Id leng sal mon
25671 34343 56565 5565
44888 56565 45554 6868
23343 23423 26226 6224
77765 88688 87464 6848
66776 23343 63463 4534
cat file2.txt
Id number
25671 34343
76767 34234
23343 23423
66776 23343
cat output.txt
Id leng sal mon
44888 56565 45554 6868
77765 88688 87464 6848
file1.txt
tem quatro colunas, file2.txt
tem duas colunas. Quero comparar a primeira coluna ( $1
) em ambos os arquivos ( file1.txt
, file2.txt
) e a saída do arquivo que não correspondeu em file2.txt
.
Eu tentei
join -v1 file1.txt file2.txt >output.txt
Mas a saída tem alguns erros. Qualquer comando awk
/ sed
é apreciado.
Assim, mas não inclui a linha de cabeçalho:
$ awk '{print $1}' file2.txt | grep -vf - file1.txt
44888 56565 45554 6868
77765 88688 87464 6848
Nota: ajustei isso para corresponder ao resultado do exemplo, não à sua descrição. Se você quiser da outra maneira, apenas mude o arquivo1 e o arquivo2.
Quebrando isso:
awk
imprime apenas o campo 1 de file2.txt
grep -v
inverte a correspondência (imprime linhas não correspondentes) -f -
informa grep
para ler a lista de padrões de correspondência de um arquivo, neste caso -
( STDIN
), que foi enviado de awk