Compare dois arquivos e produza as diferenças

Compare dois arquivos e produza as diferenças

Estou ciente diffe uso loops, mas simplesmente não consigo conseguir o que preciso com o diff. Basicamente, estou procurando comparar dois arquivos (arquivo2.txt e arquivo2.txt) e apenas obter a saída do que está faltando entre eles.

Objetivo 1: Encontrar o que está faltando no arquivo2.txt do arquivo1.txt

Objetivo 2: Encontrar o que está faltando em qualquer arquivo. Algumas linhas podem existir no arquivo2.txt que não estão no arquivo1.txt. Eu gostaria de saber sobre eles também.

diffapenas me diz que os dois arquivos não são iguais, comparando linha por linha as diferenças. O que eu preciso é de um programa que percorra o arquivo e não discrimine por linhas. Se uma linha contendo '/bin/mount' for encontrada na linha 2 do arquivo1.txt e na linha 59 do arquivo2.txt, então não preciso saber disso. Eu só quero saber o que não existe como um todo. Isso pode ser feito?

Responder1

Se você não se importa com a ordem das linhas, classifique os arquivos primeiro. Para ver quais linhas estão faltando em qual arquivo, use commem vez de diff:

comm <(sort file1) <(sort file2)

Responder2

Objetivo 1: Encontrar o que está faltando no arquivo2.txt do arquivo1.txt

Com grep:

grep -xvFf file2.txt file1.txt

Com comm:

comm -13 <(sort file1.txt) <(sort file2.txt)

Com sorte uniq:

sort file2.txt file2.txt file1.txt | uniq -u

Objetivo 2: Encontrar o que está faltando em qualquer arquivo. Algumas linhas podem existir no arquivo2.txt que não estão no arquivo1.txt. Eu gostaria de saber sobre eles também.

Com grep:

grep -xvFf file1.txt file2.txt; grep -xvFf file2.txt file1.txt

Com comm:

comm -3 <(sort file1.txt) <(sort file2.txt) | tr -d '\t'

Com sorte uniq:

sort file1.txt file2.txt | uniq -u

Responder3

Aqui está um código simples para corresponder à porcentagem de similaridade entre dois arquivos

import numpy as np
def levenshtein(seq1, seq2):
    size_x = len(seq1) + 1
    size_y = len(seq2) + 1
    matrix = np.zeros ((size_x, size_y))
    for x in range(size_x):
        matrix [x, 0] = x
    for y in range(size_y):
        matrix [0, y] = y

    for x in range(1, size_x):
        for y in range(1, size_y):
            if seq1[x-1] == seq2[y-1]:
                matrix [x,y] = min(
                    matrix[x-1, y] + 1,
                    matrix[x-1, y-1],
                    matrix[x, y-1] + 1
                )
            else:
                matrix [x,y] = min(
                    matrix[x-1,y] + 1,
                    matrix[x-1,y-1] + 1,
                    matrix[x,y-1] + 1
                )
    #print (matrix)
    return (matrix[size_x - 1, size_y - 1])

with open('original.txt', 'r') as file:
    data = file.read().replace('\n', '')
    str1=data.replace(' ', '')
with open('target.txt', 'r') as file:
    data = file.read().replace('\n', '')
    str2=data.replace(' ', '')
if(len(str1)>len(str2)):
    length=len(str1)
else:
    length=len(str2)
print(100-round((levenshtein(str1,str2)/length)*100,2),'% Similarity')

Crie dois arquivos "original.txt" e "target.txt" no mesmo diretório do conteúdo.

informação relacionada