파일 내에서 중복 된 텍스트 블록 식별


10

파일 내에서 중복 또는 거의 중복 된 텍스트 블록을 식별하는 편리한 방법이 있습니까?

코드 중복을 식별하기 위해 이것을 사용하고 싶습니다. 이 기능을 갖춘 특수 프로그램이있는 것처럼 보이지만 관련 프로그램을 사용하고 싶지는 않습니다.

diff와 유사한 도구가 일종의 "파일 내"diff를 수행하기를 바라고 있습니다. 단일 파일 vimdiff 내에 있으면 더 좋습니다.


vimdiff여기서 당신을 위해 무엇을하지 않습니까?
slm

하나의 파일 만 관련되어 있기 때문입니다. 같은 파일의 별도 부분에서 vimdiff를 사용하는 방법을 모르겠습니다.
Praxeolitic

나는 그것이 단일 파일이라는 것을 놓쳤다.
slm

답변:


13

라인 단위로 비교를 수행하는 것이 허용되는 경우 다음은 파일에 복제되는 행 text과 각 행이 몇 번 나오는지를 알려줍니다 .

sort text | uniq -c | grep -vE '^\s*1 '

예로서,

$ cat text
alpha
beta
alpha
gamma
alpha
beta
$ sort text | uniq -c | grep -vE '^\s*1 '
      3 alpha
      2 beta

일반적인 유닉스 도구를 사용하면 입력 테스트 형식이 너무 복잡하지 않다고 가정 할 때 단락 별 또는 문장 별 문장 비교로 확장 될 수 있습니다.

반복되는 단락 찾기

파일 text에 다음이 포함되어 있다고 가정하십시오 .

This is a paragraph.

This is another
paragraph

This is
a paragraph.

Last sentence.

다음 명령은 두 번 이상 나타나는 단락을 보여줍니다.

$ awk -v RS=""  '{gsub(/\n/," "); print}' text | sort | uniq -c | grep -vE '^\s*1 '
      2 This is a paragraph.

이것은 awk텍스트를 단락 (빈 줄로 표시)으로 나누고, 줄 바꿈을 공백으로 변환 한 다음, 단락 당 한 줄씩 출력을 전달하여 중복 된 단락을 계산하기 위해 정렬하고 uniq합니다.

위의 내용은 GNU에서 테스트되었습니다 awk. 다른 awk경우에는 빈 줄을 단락 (레코드) 경계로 정의하는 방법이 다를 수 있습니다.


1
한 번에 여러 줄로 투표했습니다.
Praxeolitic

1
@Praxeolitic 단락에 맞게 업데이트되었습니다.
John1024
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.