Listando linhas de apenas um arquivo em DIFF

31

Eu gostaria de obter (GNU) DIFF para imprimir apenas as linhas que são diferentes em um arquivo. Então, dado

    ==> diffa.txt <==
    line1
    line2 - in a only
    line3
    line4 changed
    line5

    ==> diffb.txt <==
    line1
    line3
    line4 changed in b
    line5
    line6 in b only

Eu gostaria que diff --someoption diffa.txt diffb.txt produzisse

    line2 - in a only

    line4 changed

O seguinte parece ser útil, mas é um pouco enigmático:

   --GTYPE-group-format=GFMT
          Similar, but format GTYPE input groups with GFMT.

   --line-format=LFMT
          Similar, but format all input lines with LFMT.

   --LTYPE-line-format=LFMT
          Similar, but format LTYPE input lines with LFMT.

   LTYPE is 'old', 'new', or 'unchanged'.
          GTYPE is LTYPE or 'changed'.

          GFMT may contain:

   %<     lines from FILE1

   %>     lines from FILE2
    
por justintime 27.04.2010 / 15:19

3 respostas

37

Não tenho certeza se diff sozinho pode fazer isso, mas você sempre pode usar o poder de outros utilitários GNU para ajudá-lo.

diff -u diffa.txt diffb.txt | grep '^-[^-]' | sed 's/^-//'

Ele faz o diff, então seleciona apenas as linhas que começam com '-' - elas são alteradas e possuem valores do arquivo diffa.txt, então sed apenas remove os sinais '-'.

Editar: Após algumas experiências com diff , parece que o comando abaixo produz o que você deseja:

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt
    
por 27.04.2010 / 15:31
10

Um método mais simples é usar o utilitário comm linux (ele precisa de um arquivo ordenado para entrada). Escreve na saída padrão:

  • linhas exclusivas para diffa.txt

  • linhas exclusivas para diffb.txt

  • linhas comuns

e você pode suprimir cada um deles pelo parâmetro 1,2 ou 3 de acordo. Então, no seu caso, será assim:

comm -23 diffa.txt diffb.txt

Ele suprime linhas que são exclusivas para diffb.txt, linhas que são comuns e imprimem linhas que são exclusivas apenas para diffa.txt

Origem de: link

    
por 26.10.2016 / 15:28
2

Gostaria de mencionar que comm espera arquivos de entrada classificados e, portanto, relata resultados diferentes de diff .

diff --changed-group-format='%<' --unchanged-group-format='' diffa.txt diffb.txt

é universal. Kudos para @vava

    
por 04.07.2017 / 16:06

Tags