파일에서 반복되는 텍스트 블록 식별

파일에서 반복되는 텍스트 블록 식별

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

코드 중복을 식별하는 데 사용하고 싶습니다. 이 기능을 갖춘 전문 프로그램이 있는 것 같지만 저는 참여하고 싶지 않습니다.

일종의 "파일 내" 비교를 수행할 수 있는 diff 같은 도구가 있었으면 좋겠습니다. 더 나은 방법은 단일 파일 내에서 vimdiff를 사용하는 것입니다.

답변1

행별 비교가 허용되는 경우 다음은 파일에서 어떤 행이 반복되고 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

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

중복된 단락 찾기

파일에 다음이 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빈 줄을 단락(레코드) 경계로 정의하는 방법이 다를 수 있습니다.

관련 정보