diferenciando dois arquivos e obtendo a saída única em um terceiro

3

Sou muito novo no shell de scripts e agora estou aprendendo.

Eu tenho dois arquivos.

Arquivo 1:

1   StartInstall, CDM_2.5B263, OK       
2   EndInstall, CDM_2.5B263, SUCCESS    
3   StartPatch, CDM_2.5.0.2B1, OK       
4   StartPatch, CDM_2.5.0.3B1, OK       
5   EndPatch, CDM_2.5.0.3B1, SUCCESS 

Arquivo 2:

1   StartInstall, CDM_2.5B263, OK       
2   EndInstall, CDM_2.5B263, SUCCESS    
4   StartPatch, CDM_2.5.0.3B1, OK       
5   EndPatch, CDM_2.5.0.3B1, SUCCESS    

Eu devo encontrar a diferença no arquivo 2 comparar com o arquivo 1. Se alguma linha estiver faltando, o script de shell deve indicar a linha perdida e gravá-la em outro arquivo de texto (ex result.txt ). O script de shell também deve indicar que a linha perdida está entre as duas linhas.

Por exemplo, a saída deve ser em Error.txt Falta de linha:

3   StartPatch, CDM_2.5.0.2B1, OK

Entre 2 e 4

    
por Parul kusmatia 01.04.2017 / 12:27

2 respostas

2

Usando comm , pois os arquivos estão classificados:

comm -3 file1 file2 > result.txt

A saída contém as linhas que estão presentes em file1 , mas não file2 , e também as linhas que estão presentes em file2 , mas não file1 , prefixadas com uma tabulação.

Se os arquivos não estiverem classificados, classifique-os primeiro. Assumindo que você está usando bash, ksh ou zsh e não está claro sh :

comm -3 <(sort file1) <(sort file2) > result.txt
    
por 01.04.2017 / 13:10
1

Esta é provavelmente a maneira mais fácil. Observe que < é uma omissão e | indica que um caractere na linha é diferente. (A linha 5 em file1.txt tinha alguns caracteres em branco faltando no seu copy-paste).

$ diff -y file1.txt file2.txt > diff.txt

1   StartInstall, CDM_2.5B263, OK                               1   StartInstall, CDM_2.5B263, OK
2   EndInstall, CDM_2.5B263, SUCCESS                            2   EndInstall, CDM_2.5B263, SUCCESS
3   StartPatch, CDM_2.5.0.2B1, OK                             <
4   StartPatch, CDM_2.5.0.3B1, OK                               4   StartPatch, CDM_2.5.0.3B1, OK
5   EndPatch, CDM_2.5.0.3B1, SUCCESS                          | 5   EndPatch, CDM_2.5.0.3B1, SUCCESS

Isso não gera um novo arquivo, mas você obtém uma sessão vimdiff que compara visualmente os dois arquivos e realça as linhas e os caracteres que faltam de forma muito intuitiva.

$ vimdiff file1.txt file2.txt

    
por 01.04.2017 / 18:48