Como posso comparar dois arquivos e criar outro arquivo que não esteja no primeiro arquivo?

2

file1 contém:

100
200
300
400

file2 contém:

500
600
700
200
300

O arquivo de saída esperado será:

500
600
700
    
por Rezuan 02.09.2015 / 22:23

2 respostas

4

Se você não se importar com a saída sendo classificada, use comm .

comm -13 <(sort /tmp/file1) <(sort /tmp/file2)

Saída (implicitamente ordenada):

500
600
700
    
por 02.09.2015 / 22:30
2

com join :

join -j 1 -v 2 <(sort file1) <(sort file2)

Onde:

  • -j define o campo de junção
  • -v para suprimir linhas associadas

Ou com awk :

awk 'NR==FNR{a[$1]++} !a[$1]' file1 file2
  • O primeiro arquivo é carregado e o array a
  • e, em seguida, quando o segundo arquivo for processado e se esse valor em a não estiver presente, imprima a linha
por 02.09.2015 / 22:31