Ich bin mir diff
der Schleifen bewusst und verwende sie auch, aber mit diff bekomme ich einfach nicht das, was ich brauche. Ich möchte im Grunde zwei Dateien (file2.txt und file2.txt) vergleichen und nur die Ausgabe dessen erhalten, was zwischen ihnen fehlt.
Ziel 1: Finden Sie heraus, was in file2.txt aus file1.txt fehlt
Ziel 2: Finden Sie heraus, was in einer der Dateien fehlt. In file2.txt sind möglicherweise einige Zeilen vorhanden, die in file1.txt nicht vorhanden sind. Ich würde auch gerne mehr darüber erfahren.
diff
sagt mir nur, dass die beiden Dateien nicht gleich sind, indem es Zeile für Zeile die Unterschiede vergleicht. Was ich brauche, ist ein Programm, das die Datei durchgeht und nicht nach Zeilen unterscheidet. Wenn eine Zeile mit „/bin/mount“ in Zeile 2 von file1.txt und in Zeile 59 von file2.txt gefunden wird, muss ich das nicht wissen. Ich möchte nur wissen, was insgesamt nicht da ist. Ist das möglich?
Antwort1
Wenn Sie sich nicht um die Zeilenreihenfolge kümmern, sortieren Sie zuerst die Dateien. Um zu sehen, welche Zeilen in welcher Datei fehlen, verwenden Sie comm
stattdessen diff
:
comm <(sort file1) <(sort file2)
Antwort2
Ziel 1: Finden Sie heraus, was in file2.txt aus file1.txt fehlt
Mit grep
:
grep -xvFf file2.txt file1.txt
Mit comm
:
comm -13 <(sort file1.txt) <(sort file2.txt)
Mit sort
und uniq
:
sort file2.txt file2.txt file1.txt | uniq -u
Ziel 2: Finden Sie heraus, was in einer der Dateien fehlt. In file2.txt sind möglicherweise einige Zeilen vorhanden, die in file1.txt nicht vorhanden sind. Ich würde auch gerne mehr darüber erfahren.
Mit grep
:
grep -xvFf file1.txt file2.txt; grep -xvFf file2.txt file1.txt
Mit comm
:
comm -3 <(sort file1.txt) <(sort file2.txt) | tr -d '\t'
Mit sort
und uniq
:
sort file1.txt file2.txt | uniq -u
Antwort3
Hier ist ein einfacher Code, um den Ähnlichkeitsprozentsatz zwischen zwei Dateien abzugleichen
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')
Erstellen Sie zwei Dateien „original.txt“ und „target.txt“ im selben Verzeichnis mit Inhalt.