Vergleichen Sie zwei Dateien und geben Sie die Unterschiede aus

Vergleichen Sie zwei Dateien und geben Sie die Unterschiede aus

Ich bin mir diffder 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.

diffsagt 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 commstattdessen 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 sortund 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 sortund 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.

verwandte Informationen