我知道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)
與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」。