2011-01-05 4 views
-1

특정 제목의 출현을 검색하려는 텍스트 파일 (약 1.5 기가 바이트)이 있습니다. 내 목록에는 약 천만 개의 제목이 있습니다.fgrep은 몇 개의 검색 문자열을 처리 할 수 ​​있습니까?

분명히 목록의 모든 제목이 텍스트 파일에있는 것은 아닙니다. 괜찮아. 텍스트에 어떤 제목이 있는지 알아야합니다.

지금은 몇백 개가 있다면 fgrep을 사용하여 파일 (예 : fgrep -f patternlist.txt bigtextfile.txt)에서 검색 문자열을 읽으라고 말합니다.

하지만 많은 데이터에 fgrep이 걸릴 것입니까?

내 제목 목록과 텍스트 파일을 fgrep과 함께 사용할 수있는 형식으로 바꾸려면 약간의 작업이 필요합니다. 따라서이 작업을 수행하기 전에 이것이 가능할 지 생각해보십시오.

또 다른 옵션은 제목 목록을 여러 파일로 분할하고 각 하위 목록에 대해 fgrep을 한 번 실행하는 것입니다. 그것은 합리적으로 많은 수의 검색 문자열을 처리 할 수 ​​있다면 fgrep을 제공하는 것이 좋습니다. 1 백만 달러를 처리 할 수 ​​있다면 그것은 생각할 필요가 없습니다. 100,000 개를 돌파 할 수 없다면 (100 개 이상의 개별 런을 필요로 함) 덜 매력적인 옵션입니다.

그럼 누구나 매우 많은 수의 문자열을 검색하는 데 fgrep을 사용한 경험이 있습니까? 그렇지 않은 경우 다른 프로그램을 사용할 수 있습니까? 나는 1-2 일 주어진 나의 자신을 쓸 수 있었다, 그러나 나가 일을 피할 수있는 경우에. . .

+0

왜 그냥 사용해 보지 않으시겠습니까? –

+0

말했듯이, 이것을 시도하기 위해 데이터를 올바른 형식으로 가져 오는 데는 몇 시간의 작업이 필요합니다. 나는 시간을 보내기 전에 다른 누군가가 그것을 시도하기를 바랬습니다. –

+0

Downvoter? 설명 적 설명을 제공하는 것이 일반적입니다. –

답변

0

fgrep 규모는 아주 잘 같은 발명을 사용하여 :

귀하의 패턴 목록을 읽고 를 컴파일하고 메모리에 유지 , 당연히 이자형. 입력 파일은 최적의 리소스 사용을 위해 --mmap 옵션으로 메모리 매핑 될 수 있습니다. 커널은 파일을 메모리 영역에 매핑합니다. 응용 프로그램 자체는 방법을 모르지만 전체 파일에 간단한 메모리 주소로 액세스 할 수 있습니다.

+0

고맙습니다. 나는 알고리즘이 어떻게 작동하는지 잘 알고 있으며 많은 수의 문자열을 효율적으로 일치시킬 수 있다는 데 의심의 여지가 없다. 문제는 fgreq가 실제로 메모리가 부족하거나 DFA를 구축하는 데 오랜 시간이 걸리지 않고 천만 개의 입력 문자열을 처리 할 수 ​​있는지 여부입니다. 1.5 기가 바이트에서 필자는 입력 파일이 특히 크다고 생각하지 않으며 충분한 메모리가 있으면 표준 OS 파일 캐싱으로 충분합니다. –

+0

Iulian Moraru와 David G. Andersen (텍스트 용 __Fast Cache : 피드 포워드 블룸 필터를 사용한 정확한 패턴 매칭 가속화 __)의 연구 프로젝트는 기존 (f) grep 구현의 경계에 대해 좋은 인상을줍니다. 나는 그들에게 결코 도달하지 못했다. –

관련 문제