Linux에서 두 파일의 차이점을 효율적으로 얻는 방법은 무엇입니까?

Linux에서 두 파일의 차이점을 효율적으로 얻는 방법은 무엇입니까?

저는 두 가지 큰 차이점을 찾아내려고 노력해 왔습니다.. txtLinux의 파일(각각 >6GB) 모든 변형을 시도했지만 diff문제는 프로세스가 매우 빠르게 중단되고 "메모리 부족"으로 끝나는 것입니다.

내가 얻고 싶은 것은 file1과 file 2의 정확한 차이점입니다.

파일 1.

aaa
bbb

파일 2.

bbb

차이점(파일 1, 파일 2):

 aaa

모든 제안은 비교되는 파일의 거대한 크기(약 6GB)와 제한된 사용 가능한 메모리를 고려해야 합니다. 매우 감사합니다

ベストアンサー1

귀하의 질문으로 인해 누락된 중요 정보:

  • "모든 차등 변형"이란 무엇을 이해합니까?

  • 어떤 파일 크기를 원하시나요? 파일에는 몇 줄이 있습니까?

귀하의 질문에 대답하는 유일한 방법은 많은 배경 정보를 제공하는 것입니다.

세 가지 기본 구현이 있습니다 diff.

  • 원래의유닉스의 차이점Harold Stone의 알고리즘을 기반으로 합니다. 이는 일반적으로 diffh대용량 파일의 간단한 차이점으로 발생하며 bdiff프런트엔드는 두 파일의 분할된 부분을 diff호출합니다 . diff이것은 가장 오래된 diff 구현이며, 이 diff 구현 그룹의 이식성이 뛰어난 버전은 schilytools의 일부입니다.

  • 계획유디브schilytools에서. 이 프로그램은 거의 40년이 되었습니다.

  • GNU 차이점실현에 대해. 30 살.

유닉스의 차이점

1970년대 초반 버전으로, 메모리가 매우 제한적인 소형 시스템용으로 작성되었습니다. 여전히 할당된 RAM(일반적으로 5*sizeof(int) * sum_of_lines)이 필요합니다.

Stone의 알고리즘은 삽입 또는 삭제 후 최상의 재동기화 일치를 검색합니다. 이는 파일 행 합계의 제곱에 비례하여 CPU 시간을 소비합니다. 이는 비교 작업이 너무 오래 걸릴 때까지 최신 하드웨어의 일반적인 가용성을 파일당 몇 메가바이트로 제한합니다.

bdiffdiff파일을 자동으로 청크로 분할하고, diff청크로 실행하고, 마지막으로 차이 출력을 병합하는 프런트엔드입니다 . 파일이 분할된 위치에 차이가 있는 경우 결과 diff 출력은 더 이상 최적이 아닙니다. bdiff원래는 SCCS작업 속도를 높이기 위해 1970년대 후반에 개발되었습니다.

diffh별도의 프로그램이며 약 CPU 시간을 사용합니다. 파일 크기에 비례하지만 재동기화에는 그다지 열의가 없습니다.

유디브

이 프로그램은 원래 1982년에 작성되었습니다. 대부분의 경우( 호출된 경우 fdiff) UNIX diff와 동일한 출력을 생성하지만 재동기화가 항상 원래 diff만큼 효율적이지는 않습니다. 원래 UNIX diff만큼 많은 메모리를 소비하지만 CPU 시간은 파일 크기에 선형적으로만 소비됩니다.

GNU 차이점

원래 UNIX 차이점과 동일한 재동기화 품질을 제공하려고 시도하지만 두 파일 크기를 합친 것보다 더 많은 RAM을 소비합니다. CPU 시간 소비가 파일 크기에 따라 선형적으로만 증가하더라도 GNU diff는 대용량 파일에 유용하지 않으므로 GNU diff는 메모리를 많이 소비하게 됩니다. 따라서 GNU diff는 몇 메가바이트의 중간 크기 파일에 가장 적합한 선택이 됩니다.

이 모든 프로그램의 최신 버전에는 줄 길이 제한이 없습니다.

일반적인 파일 크기의 경우 ( 및 udiff자매 )이 가장 빠른 diff 구현입니다. 64MB보다 큰 두 파일을 병합하려고 시도하지 않고 문제를 해결하는 데 가장 적합한 옵션인 것 같기 때문에 대용량 파일에 유용합니다.fdifffsdiffudiff

다음에서 최신 버전의 schilytools를 다운로드하는 것이 좋습니다.

http://sourceforge.net/projects/schilytools/files/

컴파일, 설치 및 실행:

fdiff file1 file2

おすすめ記事