답변:
가장 확실한 대답은 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 -
분명히 이것들은 사용 가능한 메모리가 많은 시스템에서 가장 잘 실행되며 충분한 여유 디스크 공간이 필요할 것입니다.
당신이 전에 이것을 시도했는지 여부는 당신의 질문에서 명확하지 않았습니다. 그렇다면 무엇이 잘못되었는지 아는 것이 도움이 될 것입니다 (너무 오래 걸리는 등). 나는 항상 파일 정렬과 diff 명령이 다르게 작동하는 것을 가능하게하는 파일의 도메인 특정 속성이 없다면 사용자 정의 명령뿐만 아니라 최소한 명령을 수행하는 경향이 있음을 발견했습니다.
diff <(command 1) <(command 2)
<(cmd1) <(cmd2)
구문 이 왜 작동 하는지 궁금하다면 (표준 입력을 두 번 리디렉션하는 것처럼 들립니다!) 시도하십시오 echo hello <(cmd1) <(cmd2)
. 당신은 hello /dev/fd/63 /dev/fd/62
갑자기 그것을 분명하게 만드는 것과 같은 것을 보게 될 것입니다 ;)
--speed-large-files
RAM이 충분하지 않으면이 옵션이 도움이되지 않습니다. 또한 여러 줄 레코드 구조를 유지하려는 경우 사전 정렬은 도움이되지 않습니다. (@unhammer 의해) 상기 언급 된 옵션은 흥미 있지만 출력 rdiff
하고 bsdiff
오히려 진이다. bdiff
Heirloom Toolbox에서 설치 하는 것은 어려운 작업처럼 보입니다 (Heirloom devtools, 멸종 된 헤더 파일 필요). 노력할만한 가치가 있습니까? 다른 대안이 있습니까?
입력을 정렬하고 diff
프로그램이 입력을 정렬한다고하면 속도가 엄청납니다. 나는 그런 diff
옵션을 알지 못하지만 comm
정렬 된 입력을 가정하고 목적에 충분하다면 훨씬 빠를 것입니다.
comm
전에는 들어 본 적이 없지만 분명히 coreutils에 들어 있습니다.
mkfifo
으로 사용[ab].file.sorted
하기 전에 작성하는 데 사용하십시오sort
. 모두 넣어sort
함께들&
백그라운드에서와 DIFF에 대한 파일 이름으로 파이프를 모두 사용합니다.