Параллельный шаблон grep несколько файлов

Я успешно ищу с помощью этой команды: поиск списка подозрительных IP-адресов из текстового файла ips.txt в каталоге журналов (сжатые файлы).

root@yop# find /mylogs/ -exec zgrep -i -f ips.txt {} \; > ips.result.txt

Я хочу теперь использовать параллель с ним.. чтобы ускорить поиск. Я не могу найти правильные аргументы для этого в настоящее время.. Я имею в виду использовать файл шаблона (по одному на строку), а также экспортировать его в файл результатов.

Есть ли параллельный гуру для этого, пожалуйста?

Более близкая команда, которую я нашел, была такой: grep-или-что-нибудь-еще-много-файлов-с-многопроцессорностью

Но не смог использовать его со списком файлов и экспортировать результаты в файл тоже...

Пожалуйста, помогите, спасибо всем.

2 ответа

Если вы просто хотите запустить несколько заданий одновременно, подумайте об использовании GNU параллельно:

parallel zgrep -i -f ips.txt :::: <(find /mylogs -type f) > results.txt

Как насчет зацикливания файлов, а затем помещать каждый файл в фоновое задание? Как прокомментировал Марк, это может не подойти, если у вас очень большое количество файлов журнала. Также предполагается, что вы не запускаете ничего другого.

mkdir results

for f in "$(find /mylogs/)"; do 
    (zgrep -i -f ips.txt "$f" >> results/"$f".result &); 
done

wait

cat results/* > ip.results.txt
rm -rf results

Вы можете ограничить количество файлов для поиска, используя голову и / или хвост, например, искать только первые 50 файлов:

for f in "$(find /mylogs/ | head -50)"; do...

Тогда следующие 50:

for f in "$(find /mylogs/ | head -100 | tail -50)"; do...

И так далее.

Другие вопросы по тегам