2015-02-04 5 views
0

두 개의 거대한 파일을 가지고 있는데, 각각은 400, 000, 000 라인이 넘습니다. 13GB 이상의 크기로, 각 라인은 md5 번호 (32 바이트)를 포함합니다. 두 파일 사이의 교차점을 가져오고 싶습니다. 또한 그 차이점을 얻고 싶습니다. 리눅스 셸 명령을 사용하는 것처럼 간단하지만 빠른 방법이 있는지 궁금합니다.교차로와 두 거대한 파일의 차이를 얻으십시오

사거리 (두 파일의 줄) :

comm -12 file1 file2 

차이 (하나 개의 파일에 라인 그러나 다른되지 않음) :

파일을 가정
+0

조금 더 자세히 설명하십시오 : 1) 하나의 md5 번호가 동일한 파일에 여러 번 나타날 수 있습니까? 2) md5 번호가 정렬되어 있습니까? 3) 교차로의 의미를 정의하시오. 예를 들어, 두 파일 모두에 동일한 숫자가 있지만 순서가 다른 경우 교차/diff 정의에서 동일하게 간주됩니까? 즉, 두 파일에 나타나는 숫자와 파일 중 하나에 나타나는 숫자를 찾고 (어떤 파일도 출력합니까?) –

+0

아마도'diff <(sort file1) <(sort file2)'일을 할 것인가? –

+0

귀하의 의견을 보내 주셔서 감사합니다, 1) 각 md5 번호는 파일에 한 번만 나타납니다 2) 번호가 정렬됩니다 3) 교차로는 순서를 고려하지 일반적인 번호를 의미합니다 –

답변

1

comm이 일을 할 것, 분류되어 있습니다
comm -3 file1 file2 

두 번째 경우에는 file2의 행만 탭으로 들여 쓰기됩니다. 이를 제거하려면 sed을 통해 출력을 필터링하십시오. 파일이 이미 정렬되어 있지 않은 경우

, 당신은 process substitution와 함께 즉석에서 그것을 할 수 있습니다 :

comm -12 <(sort file1) <(sort file2) 
comm -3 <(sort file1) <(sort file2) 

또한 한 번 명령을 실행할 수 있습니다; 0 탭으로 시작하는 줄은 file1에만 있습니다. 1 탭부터는 file2에만 있습니다. 두 탭으로 시작하는 파일은 두 파일에 있습니다.

관련 문제