The OpenNET Project / Index page

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

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

"подскажите кто знает perl"  
Сообщение от LKharlamov email(??) on 06-Янв-08, 12:01 
Простенький скрипт:

#!/usr/bin/perl

#get load avg for 1;5;10 min
open(PROCESS, "uptime |");
$avg = <PROCESS>;
close(PROCESS);

$avg =~ s/^.*:\s(\d+\,\d{2}),?\s(\d+\,\d{2}),?\s(\d+\,\d{2})$//;

print "1min:$1 5min:$2 10min:$3";

Результат выполнения:
1min:0,14 5min:0,13 10min:0,10

результат отработки команды uptime в системе:
13:59  up 1 day,  2:11, 1 user, load averages: 0,14 0,13 0,10

Как сделать чтобы скрипт выдавал так:
1min:0.14 5min:0.13 10min:0.10 - (т.е. вместо запятых чтобы были точки)?

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

 Оглавление

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


1. "подскажите кто знает perl"  
Сообщение от Goudini on 06-Янв-08, 21:45 
>[оверквотинг удален]
>
>Результат выполнения:
>1min:0,14 5min:0,13 10min:0,10
>
>результат отработки команды uptime в системе:
>13:59  up 1 day,  2:11, 1 user, load averages: 0,14
>0,13 0,10
>
>Как сделать чтобы скрипт выдавал так:
>1min:0.14 5min:0.13 10min:0.10 - (т.е. вместо запятых чтобы были точки)?

$avg =~ s/^.*:\s(\d+\.\d{2}),?\s(\d+\.\d{2}),?\s(\d+\.\d{2})$//;

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

2. "подскажите кто знает perl"  
Сообщение от LKharlamov email(??) on 06-Янв-08, 22:24 
>$avg =~ s/^.*:\s(\d+\.\d{2}),?\s(\d+\.\d{2}),?\s(\d+\.\d{2})$//;

не работает, выдаётся просто:
1min: 5min: 10min:

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

3. "подскажите кто знает perl"  
Сообщение от Goudini on 06-Янв-08, 23:14 
>не работает, выдаётся просто:
>1min: 5min: 10min:

$avg =~ s/^.*:\s(\d+\,\d{2}).?\s(\d+\,\d{2}).?\s(\d+\,\d{2})$//;
а так? %)

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

4. "подскажите кто знает perl"  
Сообщение от FarID (ok) on 07-Янв-08, 10:53 
$avg =~ s/,/\./g;
$avg =~ s/^.*:\s([\d\.]+),\s([\d\.]+),\s([\d\.]+)$//;

кстати в линуксе лучше читать файлик /proc/loadavg

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

5. "подскажите кто знает perl"  
Сообщение от Raptor email(??) on 07-Янв-08, 15:07 

>Как сделать чтобы скрипт выдавал так:
>1min:0.14 5min:0.13 10min:0.10 - (т.е. вместо запятых чтобы были точки)?

попробуй вместо \, поставить \. или .

Не гарантирую но на 80% уверен :)


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

6. "подскажите кто знает perl"  
Сообщение от LKharlamov email(??) on 07-Янв-08, 20:29 
пришёл к варианту:

$avg =~ s/,/\./g;
$avg =~ s/^.*:\s([\d\.]+)?\s([\d\.]+)?\s([\d\.]+)$//;

при выполнении скрипта из консоли результат выдаётся нормальный:
1min:0.05 5min:0.07 10min:0.04

а при выполнении скприпта из кактуса, в логе пишется:
perl /usr/local/share/cacti/scripts/loadavg_multi.pl, output: 1min:0.01. 5min:0.05. 10min:0.04

откуда берётся точка после первых значений я ненаю...

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

7. "подскажите кто знает perl"  
Сообщение от LKharlamov email(??) on 07-Янв-08, 21:20 
Проблемма разрешилась следующим образом, мой uptime выдаёт:
23:15  up 2 days, 11:26, 1 user, load averages: 0,06 0,02 0,00

Взял с другой машины uptime (тоже freebsd) выдаёт:
11:16PM  up 2 days, 11:28, 1 user, load averages: 0.26, 0.06, 0.02

как раз под такой вывод и заточен изначальный скприпт.

ps: осталось теперь понять откуда различия растут, но это уже совсем другая история.

Всем пасип за ответы.

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

8. "подскажите кто знает perl"  
Сообщение от angra (ok) on 07-Янв-08, 21:42 
У как все запущено. А что будет если локаль другая и разделитель точка, а не запятая? А если  uptime не в $PATH? Зачем s// вместо //, зачем экранируем запятые, зачем экранируем в замене и в []?
Простейший работающий вариант
perl -e '$_=`/usr/bin/uptime`;/average.*(\d+)[,.](\d+).*(\d+)[,.](\d+).*(\d+)[,.](\d+)/; print "1 min:$1.$2 5min:$3.$4 15min:$5.$6\n"'
Для большей строгости конечно можно было бы вместо .* использовать разделители выдаваемые uptime, но я не уверен что они для всех версий одинаковы.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

9. "подскажите кто знает perl"  
Сообщение от LKharlamov email(??) on 08-Янв-08, 12:21 
>У как все запущено. А что будет если локаль другая и разделитель
>точка, а не запятая? А если  uptime не в $PATH?
>Зачем s// вместо //, зачем экранируем запятые, зачем экранируем в замене
>и в []?
>Простейший работающий вариант
>perl -e '$_=`/usr/bin/uptime`;/average.*(\d+)[,.](\d+).*(\d+)[,.](\d+).*(\d+)[,.](\d+)/; print "1 min:$1.$2 5min:$3.$4 15min:$5.$6\n"'
>Для большей строгости конечно можно было бы вместо .* использовать разделители выдаваемые
>uptime, но я не уверен что они для всех версий одинаковы.
>

ненаю пока perl, а вам angra - РЕСПЕКТ!

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

10. "подскажите кто знает perl"  
Сообщение от angra (ok) on 09-Янв-08, 02:22 
Это не столько сам Perl, сколько перловые регексы. Рекомендую к прочтению man perlretut для основ и man perlre + man perlop в качестве справочника. Если же есть время и хочется овладеть регексами в совершенстве, то тогда O'Reilly "Mastering regular expressions"

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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