Pesquisa de site

Como comparar três arquivos no Linux usando a ferramenta diff3


Em um de nossos tutoriais anteriores, discutimos um utilitário de linha de comando do Linux, chamado diff, que permite comparar dois arquivos linha por linha. Mas e se o requisito for comparar não dois, mas três arquivos? Sim, também existe um utilitário de linha de comando do Linux para isso, e é apropriadamente chamado de diff3.

Se você está procurando por essa ferramenta, não procure mais. Neste tutorial, explicaremos o uso de diff3 por meio de exemplos fáceis de entender.

Instale o diff3

A ferramenta diff3 provavelmente será instalada por padrão em seu sistema - no Ubuntu, pelo menos. Mas se esse não for o caso, não se preocupe, pois você pode fazer isso facilmente instalando o pacote GNU Diffutils. Para obter instruções sobre como baixar e instalar o pacote em seu sistema, clique aqui.

Uso do Diff3

Como o utilitário diff3 compara três arquivos, para nossos exemplos de uso, teremos que pegar três arquivos que passaremos como entrada para a ferramenta.

Aqui está o arquivo1:

This is line1 with some change
This is line2
This is line3

Aqui está o arquivo2:

This is line1
This is line2
This is line3

E aqui está o arquivo3:

This is line1
This is line2
This is line3

Claramente, se virmos o conteúdo destes três arquivos, a única alteração está na primeira linha do primeiro arquivo. Então agora vamos ver como o diff3 relata essa mudança.

Veja como podemos usar diff3 neste caso:

diff3 file1 file2 file3

E aqui está a saída que ele produz:

====1
1:1c
 This is line1 with some change
2:1c
3:1c
 This is line1

Você pode compreender a saída da seguinte maneira:

  • A primeira linha que começa com quatro sinais ‘=’ e termina com o número ‘1’ indica que a alteração está no primeiro arquivo.
  • Na próxima linha, o primeiro '1' significa arquivo1; o '1c' após dois pontos 'significa que a primeira linha contém'. A linha real é exibida na próxima linha da saída.
  • Da mesma forma, 2:1c e 3:1c significam 'a primeira linha do arquivo2 e do arquivo3 contém'. E como o conteúdo da linha é o mesmo em ambos os arquivos, a linha real é exibida apenas uma vez, no final da saída.

Para deixar as coisas mais claras, vamos pegar outro caso em que a alteração está no arquivo3.

Aqui está o arquivo1:

This is line1
This is line2
This is line3

Aqui está o arquivo2:

This is line1
This is line2
This is line3

E aqui está o arquivo3:

This is line1 with some change
This is line2
This is line3

O comando permanece o mesmo:

diff3 file1 file2 file3

E aqui está a saída:

====3
1:1c
2:1c
 This is line1
3:1c
 This is line1 with some change

Portanto a saída, neste caso, pode ser compreendida como:

  • A mudança está no arquivo3
  • Tanto o arquivo1 quanto o arquivo2 contêm "Esta é a linha1" como primeira linha
  • Enquanto o arquivo3 contém "Esta é a linha1 com algumas alterações" como primeira linha.

Foi tudo sobre como os relatórios diff3 mudam nas linhas. Agora vamos ver como o diff3 se comporta se um dos arquivos contém uma linha extra:

Embora o arquivo1 e o arquivo2 permaneçam iguais, aqui está o arquivo3:

This is line1
This is line2
This is line3
This is line4

Como fica claro pelo seu conteúdo, file3 agora contém uma linha extra no final.

Vamos executar o mesmo comando diff3:

diff3 file1 file2 file3

E aqui está a saída que o comando produz:

====3
1:3a
2:3a
3:4c
 This is line4

A saída começa dizendo que a alteração está no arquivo3. A mudança está na quarta linha do arquivo3 (3:4c), que é uma linha totalmente nova quando comparada ao arquivo1 e ao arquivo2.

O que discutimos até agora foram alguns casos diretos. Vejamos algumas situações um pouco complexas. Por exemplo, considere arquivo1, arquivo2 e arquivo3 contendo o seguinte:

This is line1
This is line2 with some change
This is line3
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3 with some change

Portanto, agora tanto o arquivo1 quanto o arquivo2 contêm alterações, e isso também em linhas diferentes. Vamos ver o que diff3 produz neste caso:

====
1:2,3c
 This is line2 with some change
 This is line3
2:2,3c
 This is line2
 This is line3
3:2,3c
 This is line2
 This is line3 with some change

Como você pode ver na saída mostrada acima, a primeira linha não contém nenhum número. Isso ocorre porque agora não um, mas vários arquivos contêm alterações. Para diff3, as linhas 2 e 3 de todos os três arquivos agora são diferentes. Essa é a razão pela qual, em vez de um único número após os dois pontos (:), a saída agora contém um intervalo - '2,3', que significa da linha 2 à linha 3.

Vejamos mais um exemplo. Suponha que desta vez os três arquivos contenham as seguintes informações:

This is line1
This is line2
This is line3
This is line4
This is line1
This is line2
This is line3
This is line1
This is line2
This is line3
This is line4
This is line5

Agora, quando o comando diff é executado, ele produz a seguinte saída:

====
1:4c
 This is line4
2:3a
3:4,5c
 This is line4
 This is line5

Aqui, se você tentar entender, o comando diff3 diz que as alterações estão após a linha 3 em todos os três arquivos. Enquanto o arquivo1 contém a linha "Esta é a linha4" como quarta linha, o arquivo3 contém "Esta é a linha4" e "Esta é a linha5" como a quarta e quinta linhas, respectivamente. O arquivo2, por outro lado, possui apenas 3 linhas.

Então isso foi tudo sobre o trabalho básico no diff3. Para saber se vale a pena, aqui está o que a documentação oficial diz sobre a ferramenta: "Você pode usar o comando diff3 para mostrar diferenças entre três arquivos. Quando duas pessoas têm fez alterações independentes em um original comum, diff3 pode relatar as diferenças entre o original e as duas versões alteradas e pode produzir um arquivo mesclado que contém as alterações de ambas as pessoas junto com avisos sobre conflitos.".

Conclusão

Acabamos de arranhar a superfície aqui, o Diff3 é capaz de fazer muito mais. Por exemplo, como também aponta a documentação oficial, você também pode usá-la para mesclar alterações. Além disso, existem muitas opções de linha de comando que permitem personalizar a saída do comando, bem como acessar alguns outros recursos que ele oferece. Está tudo na página de manual, leia-o. Você também pode querer verificar nosso tutorial de comando sdiff

Artigos relacionados: