![Linux에서 두 파일의 행 데이터의 정확한 차이](https://linux55.com/image/110918/Linux%EC%97%90%EC%84%9C%20%EB%91%90%20%ED%8C%8C%EC%9D%BC%EC%9D%98%20%ED%96%89%20%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%9D%98%20%EC%A0%95%ED%99%95%ED%95%9C%20%EC%B0%A8%EC%9D%B4.png)
두 파일 간의 차이점을 정확하게 출력해야 합니다. 데이터는 쉼표로 구분된 행에 있으며 많은 행이 있습니다. 예를 들어 행 하나만 보여드렸습니다. 모든 문자열은 다른 파일의 모든 문자열을 찾아야 합니다.
예:
파일 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