
Estou ciente diff
e 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.
diff
apenas 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 comm
em 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 sort
e 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 sort
e 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.