The OpenNET Project / Index page

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

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

"Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 22-Авг-06, 12:06 
Если у кого есть в наличии и кому не жалко, не могли бы вы выложить здесь два скрипта.
1. (Попроще) Подсчитывает в файле количество слов "add"
2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер равный числу запуска скрипта

Заранее благодарен!

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

 Оглавление

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


1. "Нужны 2 скрипта для FreeBSD"  
Сообщение от sclif13 (??) on 22-Авг-06, 12:15 
Perl вам поможет, товарищь!!!


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

2. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 22-Авг-06, 18:32 
>Если у кого есть в наличии и кому не жалко, не могли
>бы вы выложить здесь два скрипта.
>1. (Попроще) Подсчитывает в файле количество слов "add"
>2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер
>равный числу запуска скрипта
>
>Заранее благодарен!


1. подсчитывает количество вхождений последовательности символов "add"
#!/usr/bin/bash
cat < FILE_NAME | grep -o "add" | grep -c "add"

2. Если имеется ввиду за текущую сессию... то

#!/usr/bin/bash
if [ ! NUM_BZIP ]
then
  export NUM_BZIP=1
else
  NUM_BZIP=`expr $NUM_BZIP + 1`
fi
bzip2 -k App.log
mv App.bz2 /var/log/App.NUM_BZIP.bz2

если за все время... то
#!/usr/bin/bash
if [ ! -f /var/log/NUM_BZIP ]
then
  echo 1 > /var/log/NUM_BZIP
esle
  NUM_BZIP=$( cat /var/log/NUM_BZIP )
  NUM_BZIP=`expr NUM_BZIP + 1`
  echo $NUM_BZIP >> /var/log/NUM_BZIP
fi
bzip2 -k App.log
mv App.bz2 /var/log/App.NUM_BZIP.bz2

Удачи!

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

3. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 22-Авг-06, 18:34 
>  NUM_BZIP=$( cat /var/log/NUM_BZIP )
>  NUM_BZIP=`expr NUM_BZIP + 1`
>  echo $NUM_BZIP >> /var/log/NUM_BZIP

тут забыл подставить $
  NUM_BZIP=`expr $NUM_BZIP + 1`


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

4. "Нужны 2 скрипта для FreeBSD"  
Сообщение от regunkov (ok) on 22-Авг-06, 19:46 
>>Если у кого есть в наличии и кому не жалко, не могли
>>бы вы выложить здесь два скрипта.
>>1. (Попроще) Подсчитывает в файле количество слов "add"
>>2. (Сложнее) Архивирует файл "App.log" в /var/log/App.N.bz2 где N - порядковый номер
>>равный числу запуска скрипта
>>
>>Заранее благодарен!
>
>
>1. подсчитывает количество вхождений последовательности символов "add"
>#!/usr/bin/bash
>cat < FILE_NAME | grep -o "add" | grep -c "add"

Если Ваш grep не знает опцию -o
ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'

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

5. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha (ok) on 22-Авг-06, 21:47 

>Если Ваш grep не знает опцию -o

не знает

>ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
>man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'

выдает 0 (ноль)


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

6. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 23-Авг-06, 10:40 
>>Если Ваш grep не знает опцию -o
>
>не знает

ну так поставь тот, который знает.

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

7. "Нужны 2 скрипта для FreeBSD"  
Сообщение от regunkov (ok) on 23-Авг-06, 11:02 
>
>>Если Ваш grep не знает опцию -o
>
>не знает
>
>>ну и всё-таки '\<слово\>' ищем (опции -w в POSIX тоже нет)
>>man sed | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
>
>выдает 0 (ноль)

Может мана нет, или слова sed в нем нет :)

$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
3

$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
l1      sed;sed;
l2 notsed;
sed

$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp'
l1
sed
;
sed
;

sed

здесь без '-c' для наглядности
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -e '^\<sed\>$'
sed
sed
sed

А у Вас не так?

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

8. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 23-Авг-06, 12:29 

>
>Может мана нет, или слова sed в нем нет :)
>

есть и то и другое :)

>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'

выдает 0


>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
>l1      sed;sed;
>l2 notsed;
>sed

да, это есть

>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp'

это ничего не выдает

>здесь без '-c' для наглядности
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -e '^\<sed\>$'

и это ничего не выдает

>А у Вас не так?

Как видите. Для справки: версия FreeBSD 4.11


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

9. "Нужны 2 скрипта для FreeBSD"  
Сообщение от regunkov (ok) on 23-Авг-06, 12:44 
>
>>
>>Может мана нет, или слова sed в нем нет :)
>>
>
>есть и то и другое :)
>
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -n -e 's/\<sed\>/\n&\n/gp' | grep -c -e '^\<sed\>$'
>
>выдает 0
>
>
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed"
>>l1      sed;sed;
>>l2 notsed;
>>sed
>
>да, это есть
>

Тогда пробуем так
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'

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

10. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 23-Авг-06, 12:48 
>
>Тогда пробуем так
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'
l1      sed;sed;
l2 notsed;
sed


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

12. "Нужны 2 скрипта для FreeBSD"  
Сообщение от regunkov (ok) on 23-Авг-06, 13:46 
>>
>>Тогда пробуем так
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/\<sed\>/\n&\n/g'
>l1      sed;sed;
>l2 notsed;
>sed

Есть два особых случая(!) выражений в квадратных скобках: выражение `[[:<:]]' и `[[:>:]]' соответствует пустой строке в начале и конце слова соответственно. Слово определяется как последовательность символов, входящих в это слово, и отсутствие символов до и после этой последовательности. Словесные символы входят в класс символов alnum (это определяется в wctype(3)), куда входит еще и подчеркивание. Это совместимое, но не описываемое в POSIX 1003.2 дополнение, поэтому оно используется в программах, предназначенных для переноса на другие платформы (с соответствующим предупреждением).

Может это подойдет, у меня не работает
$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'

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

13. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 23-Авг-06, 14:04 

>Может это подойдет, у меня не работает
>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'

не работает :(


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

14. "Нужны 2 скрипта для FreeBSD"  
Сообщение от regunkov (ok) on 23-Авг-06, 14:49 
>
>>Может это подойдет, у меня не работает
>>$ echo -e "l1\tsed;sed;\nl2 notsed;\nsed" | sed -e 's/[[:<:]]sed[[:>:]]/\n&\n/g'
>
>не работает :(

Короче читаем это. Насколько я понимаю сколь либо простой замены якорям \< и \> найти не удастся.

Matching words with \< and \>
Searching for a word isn't quite as simple as it at first appears. The string "the" will match the word "other." You can put spaces before and after the letters and use this regular expression: " the ." However, this does not match words at the beginning or end of the line. And it does not match the case where there is a punctuation mark after the word.

There is an easy solution. The characters "\<" and "\>" are similar to the "^" and "$" anchors, as they don't occupy a position of a character. They do "anchor" the expression between to only match if it is on a word boundary. The pattern to search for the word "the" would be "\<[tT]he\>." The character before the "t" must be either a new line character, or anything except a letter, number, or underscore. The character after the "e" must also be a character other than a number, letter, or underscore or it could be the end of line character.


Одно из наипростейших решений:

You can compensate by using the alternation mechanism. Matching the word "the" in the beginning, middle, end of a sentence, or end of a line can be done with the extended regular expression:

    (^| )the([^a-z]|$)

There are two choices before the word, a space or the beginining of a line. After the word, there must be something besides a lower case letter or else the end of the line.

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

11. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 23-Авг-06, 13:30 

>если за все время... то
>#!/usr/bin/bash
>if [ ! -f /var/log/NUM_BZIP ]
> then
>  echo 1 > /var/log/NUM_BZIP

добавить export NUM_BZIP=1

> esle
>  NUM_BZIP=$( cat /var/log/NUM_BZIP )
>  NUM_BZIP=`expr NUM_BZIP + 1`

здесь, как уже сказано пропущен $ (NUM_BZIP=`expr $NUM_BZIP + 1`)

>  echo $NUM_BZIP >> /var/log/NUM_BZIP
>fi
>bzip2 -k App.log
>mv App.bz2 /var/log/App.NUM_BZIP.bz2

и здесь тоже mv App.bz2 /var/log/App.$NUM_BZIP.bz2

>
>Удачи!

Спасибо!


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

15. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 23-Авг-06, 18:32 
>добавить export NUM_BZIP=1

а завем во втором варианте экспорт?
мы записываем кол-во вызовов в файл. а не в переменную...


>и здесь тоже mv App.bz2 /var/log/App.$NUM_BZIP.bz2

угук.. вечер был.. тупняк ))

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

16. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 24-Авг-06, 11:04 
>>добавить export NUM_BZIP=1
>
>а завем во втором варианте экспорт?
>мы записываем кол-во вызовов в файл. а не в переменную...
>

Я конечно не силен в скриптах, но вроде бы без этого NUM_BZIP не инициализируется при первом запуске.

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

17. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 24-Авг-06, 11:46 
>Я конечно не силен в скриптах, но вроде бы без этого NUM_BZIP
>не инициализируется при первом запуске.


if [ ! -f /var/log/NUM_BZIP ] #если не существует файла NUM_BZIP в директории /var/log/
then
  echo 1 > /var/log/NUM_BZIP #тогда создаем этот файл и записываем туда 1
esle
  NUM_BZIP=$( cat /var/log/NUM_BZIP ) #если такой файл существуетЮ тогда считываем цифру, что там лежит
  NUM_BZIP=`expr NUM_BZIP + 1` #увеличиваем это значение на единицу
  echo $NUM_BZIP > /var/log/NUM_BZIP #перезаписываем в этот файл новое значение
fi

З.Ы. пока коментировал нашел ошибку )))
в строке echo $NUM_BZIP > /var/log/NUM_BZIP должен стоять только один символ ">"
это означает, что файл будет переписан.
">>" - означает, что текст будет дописан в конец файла.

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

18. "Нужны 2 скрипта для FreeBSD"  
Сообщение от leha email(ok) on 24-Авг-06, 11:53 
Если if здесь работает также как С++, то в ветку между else и fi мы не попадаем в первом запуске. В этом случае NUM_BZIP не проинициализирован. Так?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

19. "Нужны 2 скрипта для FreeBSD"  
Сообщение от Dif (??) on 24-Авг-06, 13:06 
>Если if здесь работает также как С++, то в ветку между else
>и fi мы не попадаем в первом запуске. В этом случае
>NUM_BZIP не проинициализирован. Так?


не так. смотри условие и думай.

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

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

Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру