Параллельный рекурсивный Grep с пропуском строки

Debe usar gtar, generalmente viene preinstalado con el paquete SUNWgtar:

gzip -dc gcc-4.9.0.tar.gz | /usr/sfw/bin/gtar -xf -
echo $?
0

El tar nativo de Solaris sin parches puede tener problemas con los archivos creados con GNU tar. Ver respuesta de @schily por qué.

3
23.11.2019, 12:45
2 ответа

Самый простой способ записать это дополнительное условие — просто передать вывод через другой вызов grepперед записью в файл:

find /var/logs/syslog -name \* -print0 | xargs -0 -n 1 -P 36 zgrep -f foo.txt | grep -v Duplicate > /tmp/bar.txt

Производительность выполнения этого в отдельном однопоточном -процессе будет зависеть от того, сколько записей возвращается при поиске. Если количество строк, соответствующих вашему первоначальному запросу, составляет лишь небольшую часть ваших 640 ГБ журналов, это не должно быть проблемой.

Поскольку основной вопрос также частично касается оптимизации этого поиска в целом, я отмечу, что есть два больших дополнительных улучшения, которые вы можете сделать:

  1. Используйте фиксированные строки, а не регулярные выражения для условий поиска grep. --Удалите обратную косую черту из файла шаблона и добавьте переключатель -Fв zgrep. (Переключатель -wдля соответствия только целым словам также, вероятно, будет хорошей идеей. )Поиск литеральных строк выполняется намного быстрее, чем поиск регулярных выражений.
  2. Если локаль вашей системы использует UTF -8, но ваш набор данных только ASCII, установите LC_ALL=Cв среде команды. Поиск будет выполняться намного быстрее, работая в наборе символов ASCII из 128 -символов, чем в наборе символов UTF -из ~1000 -раз -большем -8 символов.
1
27.01.2020, 21:24

Если у вас есть GNU Parallel, вы можете:

find /var/logs/syslog -name \* -print0 |
  parallel --lb -0 'zgrep -f foo.txt {} | grep -v Duplicate' > /tmp/bar.txt

Наоборот xargs -Pпри использовании вывода GNU Parallel гарантируется отсутствие смешивания строк (в соответствии с mywiki.wooledge.org/BashPitfalls #Non -atomic _пишет _с _xargs _-P ).

1
27.01.2020, 21:24

Теги

Похожие вопросы