두 개의 대용량 파일(각각 6GB)이 있습니다. 개행 문자( )를 구분 기호로 사용하여 정렬되지 않았습니다 \n
. 어떻게 구별할 수 있나요? 24시간 이내에 복용해야 합니다.
답변1
확실한 대답은 diff 명령을 사용하는 것이며 --speed-large-files 매개변수를 추가하는 것이 아마도 좋은 생각일 것입니다.
diff --speed-large-files a.file b.file
정렬되지 않은 파일을 언급하셨으니 먼저 파일을 정렬해야 할 수도 있습니다.
sort a.file > a.file.sorted
sort b.file > b.file.sorted
diff --speed-large-files a.file.sorted b.file.sorted
두 번째로 정렬된 출력을 diff에 직접 전달하여 추가 출력 파일 생성을 저장할 수 있습니다.
sort a.file > a.file.sorted
sort b.file | diff --speed-large-files a.file.sorted -
분명히 이러한 기능은 사용 가능한 메모리가 많은 시스템에서 가장 잘 실행되며, 사용 가능한 디스크 공간도 많이 필요할 것입니다.
이전에 이러한 방법을 시도해 본 적이 있는지 귀하의 질문에서 명확하지 않습니다. 그렇다면 무엇이 잘못되었는지(너무 오래 걸렸는지 등) 아는 것이 도움이 될 것입니다. 나는 파일에 작업을 다르게 수행할 수 있는 매우 도메인별 속성이 없는 한, stock sort 및 diff 명령이 최소한 사용자 정의 명령만큼 좋은 경향이 있다는 것을 항상 발견했습니다.
답변2
입력을 정렬하고 diff
프로그램에 입력이 정렬되었음을 알리면 속도가 크게 향상됩니다. diff
비슷한 옵션이 있는지는 모르겠지만 comm
입력이 정렬되어 있다고 가정하면 목적에 맞게 충분하다면 훨씬 더 빨라질 것입니다.
답변3
이 bdiff
도구는 컴퓨터의 RAM보다 훨씬 큰 정렬되지 않은 파일을 처리할 수 있습니다.
bdiff
다음 단계를 한 번 사용하고 처음 사용하기 전에 다운로드하여 컴파일하십시오.
wget https://github.com/Arkanosis/Arkonf/raw/master/tools-src/bdiff.c && \
gcc -Wformat=0 -Wno-long-long bdiff.c -o bdiff && \
rm bdiff.c
2개의 파일을 실행 bdiff
하고 비교합니다.
./bdiff a.file b.file
bdiff
출력을 파일로 리디렉션하는 것이 도움이 될 수 있습니다. 제안과 Git 저장소 링크를 제공해 주신 @unhammer에게 감사드립니다.
답변4
며칠 전 일부 큰 텍스트 파일에서 diff를 사용하는 데 문제가 있을 때 이 페이지의 솔루션을 시도했지만 나에게 맞는 것을 찾지 못했기 때문에 텍스트 파일에 대한 큰 파일 비교 프로그램을 처리하기 위해 특별히 하나를 작성했습니다. 여기로 돌아와서 이용 가능함을 알려주는 것이 공정한 것 같습니다. 저는 이 기능을 직접 사용해 본 적이 없으며 대용량 텍스트 파일에 문제가 있는 다른 사람이 이 기능을 사용해보고 귀하에게도 효과가 있는지 알려주시면 감사하겠습니다. 코드는 다음 위치에 있습니다.https://github.com/gtoal/bigfile-diff-compare