Diff는 두 파일 간의 변경 사항을 표시하는 훌륭한 도구입니다. 그러나 차이점을 무시하면서 두 텍스트 파일의 유사점을 표시하는 방법은 무엇입니까?
즉, 샘플 입력:
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
의사 출력(이와 유사):
@@ 2,3
=Hello World
이 경우 라인 정보가 손실되므로 두 파일을 모두 정렬하고 comm을 사용하는 것만으로는 충분하지 않습니다.
답변1
grep -Fxf file1 file2
-F
일반 문자열(정규식이 아님)과 일치한다는 의미, -x
전체 줄만 일치한다는 의미, -f
인수라는 이름의 파일에서 "패턴"(즉, 줄)을 가져오는 것을 의미합니다.
답변2
diff가 필요하지 않더라도 diff를 사용하는 것은 어떨까요? 이 시도:
diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
샘플 데이터에서 얻은 내용은 다음과 같습니다.
$ cat a.txt
Foo Bar
X
Hello
World
42
$ cat b.txt
Foo Baz
Hello
World
23
$ diff --unchanged-group-format='@@ %dn,%df
%<' --old-group-format='' --new-group-format='' \
--changed-group-format='' a.txt b.txt
@@ 2,3
Hello
World
답변3
comm
사용할 수 있습니다. 모든 옵션에 대해 두 입력 모두에 존재하는 행만 표시 man comm
하려고 합니다 .comm -12 ...
사람들이 지적했듯이 sort
먼저 입력을 전달해야 합니다.
답변4
Dick Grune은 이런 종류의 도구를 작성했습니다.
http://dickgrune.com/Programs/similarity_tester/
다양한 언어의 구문을 구문 분석하는 버전이 있으므로 변수 이름 변경과 같은 작업은 변경되지 않은 것으로 처리될 수 있습니다.
similarity-tester
Debian 및 Ubuntu와 동일한 방식 으로 패키지되어 있습니다 .