Como descubro linhas de um arquivo que não estão presentes em outro arquivo?

4

Eu tenho dois arquivos A e B.

Eu quero descobrir quais linhas do arquivo B não estão presentes no arquivo A.

Como faço isso? As linhas podem estar em qualquer posição no arquivo A

    
por Arvind Sridharan 19.12.2013 / 12:22

3 respostas

3

Simplesmente

grep -vxf A B

Se você também quiser o número da linha das linhas não correspondentes:

grep -nvxf A B

Se B tiver várias linhas idênticas não correspondentes, e você só quiser imprimir as linhas idênticas uma vez,

grep -vxf A B | sort | uniq  
    
por falconer 19.12.2013 / 13:43
2

você pode comando sdiff.  Uso: sdiff file1.txt file2.txt

você pode ter as linhas em qualquer lugar.

Quais são as linhas incomuns que estão lá, elas serão indicadas com o símbolo > . Veja a imagem abaixo. Exemplo:

    
por Ten-Coin 19.12.2013 / 14:01
1

Você diz que as linhas podem estar em qualquer posição, mas se a posição não for importante para você (apenas queira saber as diferenças), use comm :

   Compare sorted files FILE1 and FILE2 line by line.

   With  no  options,  produce  three-column  output.  Column one contains
   lines unique to FILE1, column two contains lines unique to  FILE2,  and
   column three contains lines common to both files.

Requer que os arquivos sejam classificados, por sorte sort pode ajudar com isso. Você pode sort A > A.sorted para classificá-lo, fazer algo semelhante com B e, em seguida:

comm -1 -3 A.sorted B.sorted

isto imprimirá "linhas exclusivas para FILE2", que neste caso é B. sortida.

Você também pode fazer o tipo inline, o comando é um pouco mais difícil de digitar, mas você salvaria algumas etapas:

comm -1 -3 <(sort A) <(sort B)
    
por roadmr 19.12.2013 / 23:32

Tags