![比较两个文件并输出差异](https://linux22.com/image/1421427/%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E5%B9%B6%E8%BE%93%E5%87%BA%E5%B7%AE%E5%BC%82.png)
我知道diff
并使用循环,但我似乎无法真正通过 diff 获得我需要的东西。我基本上是想比较两个文件(file2.txt 和 file2.txt),然后获取它们之间缺少的内容的输出。
目标 1:从 file1.txt 中找出 file2.txt 中缺少的内容
目标 2:找出任一文件中缺少的内容。file2.txt 中可能存在 file1.txt 中没有的某些行。我也想知道它们。
diff
只告诉我两个文件不一样,逐行比较差异。我需要一个程序来遍历文件,而不是按行区分。如果在 file1.txt 的第 2 行发现包含“/bin/mount”的行,而在 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”,并附上内容。