比較兩個文件並輸出差異

比較兩個文件並輸出差異

我知道diff並使用循環,但我似乎無法真正透過 diff 獲得我需要的東西。我基本上是想比較兩個文件(file2.txt 和 file2.txt)並獲取它們之間缺少的內容的輸出。

目標 1:從 file1.txt 尋找 file2.txt 中缺少的內容

目標 2:找出兩個文件中缺少的內容。 file2.txt 中可能存在一些在 file1.txt 中不存在的行。我也想了解他們的狀況。

diff只告訴我這兩份文件不一樣,逐行比較差異。我需要的是遍歷文件的程序,並且不區分行。如果在 file1.txt 的第 2 行和 file2.txt 的第 59 行找到包含「/bin/mount」的行,那麼我不需要知道它。我只想知道整體上不存在什麼。這可以做到嗎?

答案1

如果您不關心行順序,請先對文件進行排序。要查看哪個文件中缺少哪些行,請使用comm而不是diff

comm <(sort file1) <(sort file2)

答案2

目標 1:從 file1.txt 尋找 file2.txt 中缺少的內容

grep

grep -xvFf file2.txt file1.txt

comm

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

sortuniq

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'

sortuniq

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」。

相關內容