Diff e ignorar linhas faltando em um arquivo

1

Eu quero diferenciar dois arquivos e ignorar as linhas que estão presentes em um arquivo, mas ausentes no outro.

Por exemplo

Arquivo1:

foo
bar
baz
bat

Arquivo2:

foo
ball
bat

Atualmente estou executando o seguinte comando diff

diff File1 File2 --changed-group-format='%>' --unchanged-group-format=''

Que neste caso produziria

bar
baz

como saída, ou seja, apenas linhas ausentes ou conflitantes. Gostaria de imprimir apenas linhas conflitantes, ou seja, ignorar casos em que uma linha está ausente do Arquivo2 e está presente no Arquivo1 (e não o contrário). Existe alguma maneira de fazer algo parecido com isso usando diff ou eu tenho que recorrer a outras ferramentas? Se sim, o que você recomendaria?

    
por Millianz 06.04.2012 / 23:58

2 respostas

2

Você também pode dar uma olhada em comm , se tiver disponível:

comm [-1] [-2] [-3 ] file1 file2
-1 Suppress the output column of lines unique to file1.
-2 Suppress the output column of lines unique to file2.
-3 Suppress the output column of lines duplicated in file1 and file2.

Os arquivos de entrada devem ser classificados. No entanto, você pode modificar o comportamento padrão com a opção --nocheck-order, se disponível.

No seu caso, você deseja comm --nocheck-order -23 file filter_file

    
por 07.04.2012 / 10:26
0

Quando você diz conflitante, você quer dizer entradas que aparecem tanto no File1 quanto no FIle2?

Em caso afirmativo, use o seguinte -

Crie um script de shell chamado mycmopare.sh e coloque o abaixo nele.

#!/bin/bash
File1Contents=$(cat File1)

for i in $File1Contents; do
   grep $i File2
done

Execute mycompare.sh no diretório em que Arquivo1 e Arquivo2 estão armazenados.

Saída:

foo
bat
    
por 07.04.2012 / 07:34