두 파일을 비교하고 차이점을 출력합니다.

두 파일을 비교하고 차이점을 출력합니다.

나는 루프를 알고 있고 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)

와 :sortuniq

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'

와 :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"라는 두 개의 파일을 만듭니다.

관련 정보