it-swarm-ko.tech

두 개의 텍스트 파일의 공통 줄 (유사성)을 출력합니까 (diff의 반대)?

Diff는 두 파일 간의 변경 사항을 표시하는 훌륭한 도구입니다. 그러나 차이점을 무시하면서 두 텍스트 파일의 유사성을 표시하는 방법은 무엇입니까?

즉 샘플 입력 :

a:
Foo Bar
X
Hello
World
42

b:
Foo Baz
Hello
World
23

의사 출력 (이와 같은 것) :

@@ 2,3
=Hello World

이 경우 줄 정보가 손실되므로 두 파일을 정렬하고 통신을 사용하는 것만으로는 충분하지 않습니다.

23
maxschlepzig

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
24
Mike Gray
grep -Fxf file1 file2

-F은 정규 문자열이 아닌 일반 문자열과 일치 함을 의미합니다. -x은 (는) 전체 일치 만 의미합니다. -f은 인수로 이름이 지정된 파일에서 '패턴'(즉, 행)을 취하는 것을 의미합니다.

15
tobyodavies

나는 당신이 원하는 것을하는 단일 명령이 있다고 생각하지 않습니다. diff의 출력을 grep와 결합 할 수 있습니다. 텍스트 파일에 문자 |, <, >, 다음은 다소 유용한 출력을 제공합니다.

$ diff --side-by-side a b | grep -n -v "[|<>]"
3:Hello                             Hello
4:World                             World
8
Marcel Stimberg

comm를 사용할 수 있습니다. man comm 모든 옵션에 사용하지만 comm -12 ... 두 입력에 모두 존재하는 행만 표시합니다.

사람들이 지적했듯이 먼저 sort을 (를) 통해 입력을 전달해야합니다.

7
Oli

Dick Grune은 이런 종류의 도구를 작성했습니다.

http://dickgrune.com/Programs/similarity_tester/

다양한 언어의 구문을 구문 분석하는 버전이 있으므로 이름이 바뀐 변수와 같은 것을 변경하지 않은 것으로 볼 수 있습니다.

similarity-tester 데비안과 우분투에서.

2
Douglas Bagnall