Diff는 두 파일 간의 변경 사항을 표시하는 훌륭한 도구입니다. 그러나 차이점을 무시하면서 두 텍스트 파일의 유사성을 표시하는 방법은 무엇입니까?
즉 샘플 입력 :
a:
Foo Bar
X
Hello
World
42
b:
Foo Baz
Hello
World
23
의사 출력 (이와 같은 것) :
@@ 2,3
=Hello World
이 경우 줄 정보가 손실되므로 두 파일을 정렬하고 통신을 사용하는 것만으로는 충분하지 않습니다.
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
grep -Fxf file1 file2
-F
은 정규 문자열이 아닌 일반 문자열과 일치 함을 의미합니다. -x
은 (는) 전체 일치 만 의미합니다. -f
은 인수로 이름이 지정된 파일에서 '패턴'(즉, 행)을 취하는 것을 의미합니다.
나는 당신이 원하는 것을하는 단일 명령이 있다고 생각하지 않습니다. diff
의 출력을 grep
와 결합 할 수 있습니다. 텍스트 파일에 문자 |
, <
, >
, 다음은 다소 유용한 출력을 제공합니다.
$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello Hello
4:World World
comm
를 사용할 수 있습니다. man comm
모든 옵션에 사용하지만 comm -12 ...
두 입력에 모두 존재하는 행만 표시합니다.
사람들이 지적했듯이 먼저 sort
을 (를) 통해 입력을 전달해야합니다.
Dick Grune은 이런 종류의 도구를 작성했습니다.
http://dickgrune.com/Programs/similarity_tester/
다양한 언어의 구문을 구문 분석하는 버전이 있으므로 이름이 바뀐 변수와 같은 것을 변경하지 않은 것으로 볼 수 있습니다.
similarity-tester
데비안과 우분투에서.