>Хочу сделать скрипт - анализатор эффективности правил для assassina, но не соображу
>как организовать счетчик.
>Смысл скрипта такой: есть файл со списком названий правил (которые попадают в
>хидер) и список писем, попавших в спам с пометками в хидере,
>какие правила сработали для этого письма. Я беру поочереди названия правил
>и проверяю их наличие в теле писем, встретилось - щелкнул счетчик.
>Но как счетчик прикрутить уже не соображу:
>count=""; #счетчик, пока нулевой
>
>
>SPISOK1=""; # набор слов для поиска
>SPISOK2=""; # список файлов, где нужно искать эти слова
>
>file1="/home/test/test_rul"; # откуда берем имена правил
>file2="/home/test/test_spam_list"; #откуда берем файлы писем
>
>while [ 1 ]
>do
>read SPISOK1 || break # начинаем читать список имен правил пока не
>закончится файл
> while [ 2 ]
> do
> read SPISOK2 || break #получаем имена писем пока
>не закончится файл
> cat /home/test/spam/$SPISOK2 | awk '$0~/$SPISOK1/' # ищем название
>правил в теле каждого письма
> --=< КАК ПРИКРУТИТЬ СЧЕТЧИК? >=--
> done < $file2
> echo $SPISOK1 " = "$count >> /home/test/itogi # после поиска выводим результат
>done < $file1 В принципе, ответ уже дан, если вам нужно получать список всех правил, но не каждого правила конкретно. Если нужно каждое правило конкретно, это будет выглядеть примерно так (сразу оговорочка, я не знаю сколько там у вас правил, и пишу для пары-тройки, вы перепишите там уж как вам будет удобно с помощью массива правил):
--------------------------------------------
# counter.awk
# using: counter.awk filename.in > filename.out
#!/usr/bin/awk -f
BEGIN {passed=0; unauthorized=0; hehe=0;}
{
{
if ($0 ~ /PASSED/) passed+=1
}
{
if ($0 ~ /UNAUTHORIZED/) unauthorized+=1
}
{
if ($0 ~ /HEHE/) hehe+=1
}
}
END {
print "Passed: "passed"\nUnauthorized: "unauthorized"\nHehe: "hehe}
-----------------------------------------------
Это для одного файла, для многих файлов:
counter.awk /dir/name/* , будет счетчик всех файлов в директории /dir/name/.