파일이 2개 있고 A에는 600만 개의 행이 있고 B에는 500만 개의 행이 있습니다. A에서 행을 가져오려고 하는데 B에서 누락되었지만 grep -v -f B A
속도가 매우 느립니다. 속도를 높일 수 있는 방법이 있나요?
답변1
두 파일이 모두 이미 정렬되어 있는 경우(현재 파일과 동일한 로케일) 이 명령을 사용하십시오.
comm -23 A.txt B.txt
정렬되지 않았고 쉘이 ksh 스타일 프로세스 대체를 지원하는 경우:
(export LC_ALL=C; comm -23 <(sort A.txt) <(sort B.txt))
( LC_ALL=C
결정적(그리고 빠른) 정렬 순서를 얻습니다.)
파일 정렬이 필요하지 않은 combine
유틸리티 도 참조하세요.moreutils
combine A.txt not B.txt
그러나 전체 파일을 메모리에 로드한다는 점에 유의하세요.
답변2
나처럼 file1과 file2에 동일한 줄이 없지만 file1에 grep하려는 문자열이 포함되어 있는 파일에서 줄을 grep해야 하는 경우 를 사용할 수 sort
있습니다 join
.