Compare dos archivos y genere las diferencias.

Compare dos archivos y genere las diferencias.

Conozco difflos bucles y los uso, pero parece que no puedo obtener lo que necesito con diff. Básicamente estoy buscando comparar dos archivos (file2.txt y file2.txt) y simplemente obtener el resultado de lo que falta entre ellos.

Objetivo 1: encontrar lo que falta en file2.txt desde file1.txt

Objetivo 2: encontrar lo que falta en cualquiera de los archivos. Es posible que existan algunas líneas en file2.txt que no están en file1.txt. A mí también me gustaría saber sobre ellos.

diffsolo me dice que los dos archivos no son iguales, comparando línea por línea las diferencias. Lo que necesito es un programa que revise el archivo y no discrimine por líneas. Si se encuentra una línea que contiene '/bin/mount' en la línea 2 de file1.txt y en la línea 59 de file2.txt, entonces no necesito saberlo. Sólo quiero saber lo que no está allí en su conjunto. Se puede hacer esto?

Respuesta1

Si no le importa el orden de las líneas, primero ordene los archivos. Para ver qué líneas faltan en qué archivo, utilice commen lugar de diff:

comm <(sort file1) <(sort file2)

Respuesta2

Objetivo 1: encontrar lo que falta en file2.txt desde file1.txt

Con grep:

grep -xvFf file2.txt file1.txt

Con comm:

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

Con sorty uniq:

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

Objetivo 2: encontrar lo que falta en cualquiera de los archivos. Es posible que existan algunas líneas en file2.txt que no están en file1.txt. A mí también me gustaría saber sobre ellos.

Con grep:

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

Con comm:

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

Con sorty uniq:

sort file1.txt file2.txt | uniq -u

Respuesta3

Aquí hay un código simple para hacer coincidir el porcentaje de similitud entre dos archivos.

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')

Cree dos archivos "original.txt" y "target.txt" en el mismo directorio con contenido.

información relacionada