Conozco diff
los 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.
diff
solo 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 comm
en 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 sort
y 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 sort
y 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.