The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Построчное считывание"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы OpenNET: Виртуальная конференция (Public)
Изначальное сообщение [Проследить за развитием треда]

"Построчное считывание"  
Сообщение от R4z0R email(ok) on 24-Май-07, 15:08 
Какой командой shell можно в цикле получать по одной строке из файла для выполнения над каждой из них каких-либо действий?
Алгоритм:
- Получаем строку n
- действия над ней
- запись результата
- следующая строка
Или лучше на Перле сделать? Что будет быстрее отрабатывать?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "Построчное считывание"  
Сообщение от kernel_hacker on 24-Май-07, 16:02 
>Какой командой shell можно в цикле получать по одной строке из файла
>для выполнения над каждой из них каких-либо действий?
>Алгоритм:
>- Получаем строку n
>- действия над ней
>- запись результата
>- следующая строка
>Или лучше на Перле сделать? Что будет быстрее отрабатывать?


for + cat

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Построчное считывание"  
Сообщение от Gennadi email(??) on 24-Май-07, 19:58 
#! /bin/sh

/tmp/file

cat file | while read n
           do
            echo "$n" >> /tmp/file2
            
           done


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Построчное считывание"  
Сообщение от R4z0R email(ok) on 25-Май-07, 17:40 
Хочу сделать скрипт - анализатор эффективности правил для 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

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Построчное считывание"  
Сообщение от V (ok) on 25-Май-07, 23:10 
>Хочу сделать скрипт - анализатор эффективности правил для assassina, но не соображу
>как организовать счетчик.
>Смысл скрипта такой: есть файл со списком названий правил (которые попадают в
>хидер) и список писем, попавших в спам с пометками в хидере,
>какие правила сработали для этого письма. Я беру поочереди названия правил
>и проверяю их наличие в теле писем, встретилось - щелкнул счетчик.
>Но как счетчик прикрутить уже не соображу:
>count=""; #счетчик, пока нулевой
>
>
>SPISOK1=""; # набор слов для поиска
>SPISOK2=""; # список файлов, где нужно искать эти слова
>
>file1="/home/test/test_rul"; # откуда берем имена правил
>file2="/home/test/test_spam_list"; #откуда берем файлы писем

count=0

>while [ 1 ]
>do
>read SPISOK1 || break # начинаем читать список имен правил пока не
>закончится файл
>    while [ 2 ]
>        do
>    read SPISOK2 || break #получаем имена писем пока
>не закончится файл

    if cat /home/test/spam/$SPISOK2 | awk '$0~/$SPISOK1/'; then
       let count="$count+1"
    fi

>    done < $file2
>    echo $SPISOK1 " = "$count >> /home/test/itogi # после поиска выводим результат
>done < $file1

попробуйте так

P.S чтобы построчно считывать файл, необязательно писать таких конструкций типа
while [ 1 ], достаточно написать:

while read SPISOK2; do
.....
done<$file2

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Построчное считывание"  
Сообщение от onorua email(ok) on 26-Май-07, 09:51 
>Хочу сделать скрипт - анализатор эффективности правил для 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/.

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

6. "Построчное считывание"  
Сообщение от R4z0R email(ok) on 28-Май-07, 15:49 
спасибо, всё считает :) Можно пользоваться вместе с русскими правилами для ассассина - http://www.opennet.ru/openforum/vsluhforumID1/69857.html
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

7. "Построчное считывание"  
Сообщение от R4z0R email(ok) on 31-Май-07, 12:35 
не получается :(
совсем забыл про то, что надо сбрасывать счетчик и он плюсует новое значение к предыдущему. Но это фиг с ним - можно переделать, не получается нормально считать. он первое значение считает, а для каждого следующего прибавляет его же. Т.е если первое будет 17, то второе - 34, третье 41, четвертое 58 .....
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]



  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor