
파일에서 중복되거나 거의 중복된 텍스트 블록을 식별하는 편리한 방법이 있습니까?
코드 중복을 식별하는 데 사용하고 싶습니다. 이 기능을 갖춘 전문 프로그램이 있는 것 같지만 저는 참여하고 싶지 않습니다.
일종의 "파일 내" 비교를 수행할 수 있는 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
빈 줄을 단락(레코드) 경계로 정의하는 방법이 다를 수 있습니다.