Параллельный шаблон 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...
И так далее.