Linux에서 두 파일의 행 데이터의 정확한 차이

Linux에서 두 파일의 행 데이터의 정확한 차이

두 파일 간의 차이점을 정확하게 출력해야 합니다. 데이터는 쉼표로 구분된 행에 있으며 많은 행이 있습니다. 예를 들어 행 하나만 보여드렸습니다. 모든 문자열은 다른 파일의 모든 문자열을 찾아야 합니다.

예:

파일 1.txt

abc,def,ghi,klm,nop
one,two,three,four,five,six

파일 2.txt

abc,def,ghi,klm,nop
one,two,three,test,four,five,six

예상 출력:

test

답변1

파이썬가까운차이 라이브러리(증분 계산 도우미) 및체계기준 치수:

diff.py:

import difflib, sys

with open(sys.argv[1], 'r') as f1, open(sys.argv[2], 'r') as f2:
    differ = difflib.Differ()
    for l in differ.compare(f1.read().split(','), f2.read().split(',')):
        if (l.startswith('+ ') or l.startswith('- ')):
            sys.stdout.write(l[2:] + '\n')

용법:

python differ.py file1.txt file2.txt

산출:

test

difflib.Differ- 텍스트 줄의 순서를 비교하고 사람이 읽을 수 있는 차이 또는 델타를 생성하는 클래스

답변2

고전적인 gnu awk 방법은 항상 다음과 같습니다.

awk -v RS=",|\n" 'NR==FNR{seen[$0]++;next}!seen[$0]' file1 file2 
test

이는 awk 라인/레코드 구분 기호(RS)로 쉼표를 사용하기 때문에 작동하므로 각 파일에 대해 다음과 같은 출력을 얻습니다.

awk -v RS=",|\n" '{print $0}' file1
abc
def
ghi
klm
nop
one
two
three
four
five
six

관련 정보