2개의 대용량 파일을 일치시키고 쉘 스크립트에서 차이점을 인쇄하는 방법

2개의 대용량 파일을 일치시키고 쉘 스크립트에서 차이점을 인쇄하는 방법

2개의 파일이 있습니다.

File1에는 400,000개의 디지털 레코드가 있습니다. 예를 들어:

1
2
3
4
5
6
..
등.

파일 2에는 420k 디지털 레코드도 있습니다. 예를 들어:

1
2
3
4
6 
..
등.

두 파일 모두 정렬되지 않았습니다. 두 파일을 일치시켜 차이점을 인쇄하고 싶습니다.

diff, comm, , 를 사용하려고 하면 grep시간이 오래 걸립니다(1시간 이상). 이것은 나에게 가능하지 않습니다.

이 작업을 더 빠르게 수행하려면 어떻게 해야 합니까(차이점을 일치시키고 인쇄합니까).

저는 HP-UX를 사용하고 있습니다.

답변1

천만 줄 파일의 결과는 다음과 같습니다.

seq 10000000 |
  tee a |
  awk 'rand() < 0.05 {print int(1000000 * rand())}; 1' > b

모두:

diff a b | wc -l

comm -3 <(sort a) <(sort b) | wc -l

(ksh/bash/zsh 구문)

cmp -l a b | wc -l

3년된 저가형 PC(리눅스 구동)에서는 30초도 안 걸렸습니다.

diff내용에 따라 diff삽입, 삭제, 변경 등을 감지해야 하는 알고리즘이 데이터의 배치 방식에 영향을 받기 때문에 편차가 클 수 있지만, 다른 알고리즘과 크게 달라지지는 않습니다.

정확히 무엇을 시도하셨나요?

관련 정보