나는 루프를 알고 있고 diff
사용하고 있지만 diff로 필요한 것을 실제로 얻을 수 없는 것 같습니다. 저는 기본적으로 두 파일(file2.txt 및 file2.txt)을 비교하고 그 사이에 누락된 내용을 출력하려고 합니다.
목표 1: file1.txt에서 file2.txt에 누락된 내용 찾기
목표 2: 두 파일 중 누락된 내용을 찾습니다. file1.txt에는 없는 일부 줄이 file2.txt에 있을 수 있습니다. 나는 그들에 대해서도 알고 싶습니다.
diff
두 파일이 동일하지 않으며 차이점을 한 줄씩 비교한다는 것만 알려줍니다. 나에게 필요한 것은 파일을 순회하며, 줄을 구분하지 않는 프로그램이다. '/bin/mount'가 포함된 줄이 file1.txt의 2번째 줄에 있고 file2.txt의 59번째 줄에 있으면 이에 대해 알 필요가 없습니다. 나는 전체적으로 존재하지 않는 것이 무엇인지 알고 싶습니다. 이것이 가능합니까?
답변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: 두 파일 중 누락된 내용을 찾습니다. file1.txt에는 없는 일부 줄이 file2.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"라는 두 개의 파일을 만듭니다.