Страница 1 из 2

Ускорить grep

Добавлено: 11 сен 2006, 10:49
nemiga
Дано: Найти в файле ($1) все упоминания failure кроме некоторых, уже известных.

Предложено решение:

Код: Выделить всё

grep -ni failure $1 | grep -v failure on type | grep -v card failure  | grep -v failure on block | grep -v failure on synch | grep -v target failure | grep -v failure on dot | grep -v failure on zip | grep -v failure on throw | grep -v list failure | grep -v failure of section | grep -v no failure reported

# (набор ключевых слов изменен)
#
Все, разумеется, работает, но... очень медленно.

Есть ли возможность такого рода поиск как-то ускорить?

failure

TIA

.

Добавлено: 11 сен 2006, 12:18
StS
Try regular expressions. Somethink like this:

Код: Выделить всё

grep --regexp='\(\(unknown1\|unknown2\) failure \) \| \(failure \(unknown3\|unknown4\)\)' $1

Добавлено: 11 сен 2006, 13:40
Проф. Преображенский
grep -vf <keywordfile>

Добавлено: 11 сен 2006, 15:09
nemiga
runner писал(а):grep -vf <keywordfile>
Спасибо, попробую.

.

Добавлено: 11 сен 2006, 18:46
nemiga
nemiga писал(а):
runner писал(а):grep -vf <keywordfile>
Спасибо, попробую.
Попробовал -- еще раз спасибо. Почти на час быстрее.

.

Добавлено: 11 сен 2006, 20:32
Проф. Преображенский
nemiga писал(а):
nemiga писал(а):
runner писал(а):grep -vf <keywordfile>
Спасибо, попробую.
Попробовал -- еще раз спасибо. Почти на час быстрее.

.
А сколько работало раньше? Если нужно еще быстрее и использовать будете систематически, то можно написать простенькую прогрраммку на Сях.

Добавлено: 12 сен 2006, 20:59
bormo
runner писал(а):А сколько работало раньше? Если нужно еще быстрее и использовать будете систематически, то можно написать простенькую прогрраммку на Сях.
Еще зависит от того, какие диски - скорость чтения. Если мощный рейд и вся загвоздка в поиске, то стоит сделать сплит файлу - работает на удивление быстро и наваять простенький скриптик, чтобы парсить параллельно. Я это делал для поиска имен таблиц в дампах по 100-200 гигабайт. Правда использовал awk вместо grep

По поводу программки на Сях - если грамотно написать, то работать будет даже быстрее awk'а, а можно попробовать поискть готовые обработчики логов. Это же лог, нет?

Еще совет - сделай крон, который будет резать файл раз в какое-то время - проще будет работать.

Добавлено: 12 сен 2006, 23:54
anotherv
fgrep

Grep

Добавлено: 13 сен 2006, 06:49
nemiga
runner писал(а):А сколько работало раньше?
Часа 4-5, как повезет.

Кстати, не факт еще, что сейчас ускорилось -- может, случайно лог легкий попался.

.

Добавлено: 13 сен 2006, 06:51
nemiga
bormo писал(а): Еще зависит от того, какие диски - скорость чтения. Если мощный рейд и вся загвоздка в поиске, то стоит сделать сплит файлу - работает на удивление быстро и наваять простенький скриптик, чтобы парсить параллельно. Я это делал для поиска имен таблиц в дампах по 100-200 гигабайт. Правда использовал awk вместо grep
...
Еще совет - сделай крон, который будет резать файл раз в какое-то время - проще будет работать.
Насчет порезать файл и распараллелить -- мысль интересная. Спасибо, подумаем.

.

Добавлено: 14 сен 2006, 01:11
bormo
anotherv писал(а):fgrep
оно!

* перевод с транслита

Добавлено: 14 сен 2006, 11:11
nemiga
anotherv писал(а):fgrep
Попробовал -- те же ..., только сбоку. Не быстрее.

.

Добавлено: 16 сен 2006, 06:17
sobomax
nemiga писал(а):
anotherv писал(а):fgrep
Попробовал -- те же ..., только сбоку. Не быстрее.

.
Не парьтесь - затор скорее всего в скорости чтения с диска а вовсе не в скорости работы grep. Размер файл лога какой?

-Maxim

Grep vs. fgrep

Добавлено: 16 сен 2006, 09:46
nemiga
sobomax писал(а):
nemiga писал(а):
anotherv писал(а):fgrep
Попробовал -- те же ..., только сбоку. Не быстрее.
.
Не парьтесь - затор скорее всего в скорости чтения с диска а вовсе не в скорости работы grep. Размер файл лога какой?
-Maxim
~1 G

.

Re: Grep vs. fgrep

Добавлено: 16 сен 2006, 09:52
sobomax
nemiga писал(а):
sobomax писал(а):
nemiga писал(а):
anotherv писал(а):fgrep
Попробовал -- те же ..., только сбоку. Не быстрее.
.
Не парьтесь - затор скорее всего в скорости чтения с диска а вовсе не в скорости работы grep. Размер файл лога какой?
~1 G

.
Хм тогда действительно странно. Лог то пустяковый по размеру. Скорость обработки получается порядка 70kB/sec. Может причина где-то в другом? Как вариант - большая дисковая активность паралельно на том-же винте (база данных, итд) из за чего большинство времени диск проводит seek'ая с дорожки на дорожку. Посмотрите статистику I/O для данного диска.

-Maxim