Сравните два файла и выведите различия

Сравните два файла и выведите различия

Я знаю о diffциклах и использую их, но я просто не могу получить то, что мне нужно с помощью diff. Я в основном пытаюсь сравнить два файла (file2.txt и file2.txt) и просто получить вывод того, чего не хватает между ними.

Задача 1: Найти то, чего не хватает в file2.txt из file1.txt

Задача 2: Найти то, чего не хватает в каждом из файлов. Некоторые строки могут быть в file2.txt, но не в file1.txt. Я бы хотел узнать о них тоже.

diffтолько говорит мне, что два файла не одинаковы, сравнивая построчно различия. Мне нужна программа, которая проходит по файлу и не различает по строкам. Если строка, содержащая '/bin/mount', находится на строке 2 файла file1.txt и находится на строке 59 файла file2.txt, то мне не нужно знать об этом. Я хочу только знать, чего там нет в целом. Можно ли это сделать?

решение1

Если вам не важен порядок строк, сначала отсортируйте файлы. Чтобы увидеть, какие строки отсутствуют в каком файле, используйте commвместо diff:

comm <(sort file1) <(sort file2)

решение2

Задача 1: Найти то, чего не хватает в file2.txt из file1.txt

С grep:

grep -xvFf file2.txt file1.txt

С comm:

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

С sortи uniq:

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

Задача 2: Найти то, чего не хватает в каждом из файлов. Некоторые строки могут быть в file2.txt, но не в file1.txt. Я бы хотел узнать и о них.

С grep:

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

С comm:

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

С sortи uniq:

sort file1.txt file2.txt | uniq -u

решение3

Вот простой код для сопоставления процента схожести между двумя файлами.

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

Создайте два файла «original.txt» и «target.txt» в одном каталоге с содержимым.

Связанный контент