Использование grep с большим файлом шаблона - PullRequest
3 голосов
/ 08 декабря 2011

Я просто хотел использовать grep с опцией -f FILE. Это должно заставить grep использовать каждую строку FILE как образец и искать его.

Пробег:

grep -f patternfile searchfile

Файл шаблона, который я использовал, имеет размер 400 МБ. Файл, который я хочу найти, имеет размер 7 ГБ. Через 3 минуты процесс завершился с 70 ГБ ОЗУ и без реакции.

Это нормально? Я делаю что-то неправильно? Разве grep не способен на такой большой масштаб?

Спасибо за идеи.

Ответы [ 3 ]

5 голосов
/ 30 июля 2012

Если строки в файле шаблона являются литеральными строками, использование параметра "-F" сделает его намного быстрее.

2 голосов
/ 08 декабря 2011

Вы можете попробовать разбить задачу так, чтобы процесс grep заканчивался при каждом проходе файла. Однако я не уверен, насколько это будет полезно, учитывая размер файла, который вы ищете.

for pattern in `cat patternFile`
do
    grep "$pattern" searchFile
done
0 голосов
/ 08 декабря 2011

Я должен сказать, что впервые слышал о том, чтобы кто-то использовал файл шаблонов 700 МБ раньше - я не удивлен, что он так много памяти съел.

Если у вас есть время, я бы предложил либо разбить файл на разделы и обрабатывать каждый раздел по одному, либо даже просто обрабатывать 7ГБ файл по одному регулярному выражению за раз. Если вы можете поместить весь файл размером 7 ГБ в память и не беспокоиться о том, сколько времени это займет, то это может быть самым надежным решением.

...