- Perl выборка данных., Skif, 17:48 , 13-Июн-14 (1)
>[оверквотинг удален] > Отсюда нужно выбирать некоторые параметры, а именно CPU, MEM, IP и PORT > (числовые значения), данные получаются командой > top -n 1 -b -c .... > Собственно на стандартными средствами лини получать не удается, т.к может отличаться строка > запуска. > Собственно, необходимо что-бы параметры CPU и MEM (9 и 10 столбцы) записывались > в текстовый файл, к примеру с названием вида IP:PORT.txt(etc) > Печеньки гарантирую) > Текстовик с выводом top > http://rghost.ru/56344231 awk '{print $9 " " $10}' Что там сложного-то? Лень, разве что...
- Perl выборка данных., fire002, 00:19 , 14-Июн-14 (2)
> awk '{print $9 " " $10}' > Что там сложного-то? Лень, разве что...С выборкой cpu и mem через awk нет, проблема с выборкой IP:port в самой строке запуска, тут уже awk не подходит, ибо значения могут быть в разных столбцах(как показано на скрине).
- Perl выборка данных., Andrey Mitrofanov, 11:14 , 14-Июн-14 (3)
>> awk '{print $9 " " $10}' >> Что там сложного-то? Лень, разве что... > С выборкой cpu и mem через awk нет, проблема с выборкой IP:port OMFG
<top.txt awk 'match($0,"hlds_.+ -port ([0-9]+) \\+ip ([^ ]+)",aa){print$9" "$10>aa[2]":"aa[1]".txt"}'
- Perl выборка данных., михалыч, 15:11 , 14-Июн-14 (4)
#!/usr/bin/perluse strict; use warnings; my $file = shift; my ($cpu,$mem,$port,$ip); open FH, "<", $file or die "can't open file $file: S!"; open FT, ">", "txt"; while (<FH>) { s/^\s+//; my @s = split /\s+/, $_; ($cpu, $mem) = ($s[8], $s[9]); if (/port\s+(\d+)\s+\+ip\s+([\d\.]+)\s+/) {$port = $1; $ip = $2;} print FT "$cpu\t$mem\t$port\t$ip\n"; } close FT; close FH; > записывались в текстовый файл, к примеру с названием вида IP:PORT.txt(etc) ip/port же различные
- Perl выборка данных., михалыч, 16:26 , 14-Июн-14 (5)
> ip/port же различные или так нужно?
#!/usr/bin/perluse strict; use warnings; my $file = shift; my ($cpu,$mem,$port,$ip); open FH, "<", $file or die "can't open file $file: S!"; while (<FH>) { s/^\s+//; my @s = split /\s+/, $_; ($cpu, $mem) = ($s[8], $s[9]); if (/port\s+(\d+)\s+\+ip\s+([\d\.]+)\s+/) {$port = $1; $ip = $2;} open FT, ">", "$ip:$port.txt"; print FT "$cpu $mem\n"; close FT; } close FH; сразу не понял, что и куда писать/сохранять
- Perl выборка данных., fire002, 01:01 , 19-Июн-14 (6)
Собственно, скрипт уже написан и работает(почти). #!/usr/bin/perl -w use strict; use warnings; my $put = "/home/stat/"; open FF, "/bin/cat /proc/meminfo \| /usr/bin/head -1 \| /usr/bin/awk '{print \$2}'|"; <FF>=~/(\d+)/; my $m = $1/1024; close FF; open F, "/usr/bin/top -n 1 -b -c \| /bin/grep 'hlds_' \| /bin/grep -v 'SCREEN' \| /bin/grep -v '/bin/sh'|" or die "error: $!"; while (<F>) { chomp; if($_=~/port\s\d+.+ip\s[\d\.]+/) { my $time = time; $_=~/^\s*([^\s]+\s+){8}([^\s]+)\s+([^\s]+)\s+.*port\s(\d+).+ip\s([\d\.]+)/; my $file = "$put$5:$4.txt"; my $cpu = $2; my $mem = $3; $mem = int($mem*$m/100); open US, ">>$file" or die "error: $!"; print US "$time\::$cpu\::$mem\n"; close US; } } close F;Проблема в другом, при ручном запуске скрипта, все отрабатывает нормально. Но когда добавляешь в крон, /usr/bin/perl /home/stat/top.pl Всплывают косяки: /home/stat/top.pl: 2: use: not found /home/stat/top.pl: 3: my: not found /home/stat/top.pl: 5: Syntax error: "(" unexpected
- Perl выборка данных., михалыч, 21:09 , 19-Июн-14 (7)
> #!/usr/bin/perl -w > use strict; > use warnings;масло масляное, ключ -w и прагма use warnings; - суть одно и тоже (показывать предупреждения), оставьте что-либо одно > open F, "/usr/bin/top -n 1 -b -c \| /bin/grep 'hlds_' \| /bin/grep > -v 'SCREEN' \| /bin/grep -v '/bin/sh'|" or die "error: $!"; куча грепов, grep -v grep забыли )) можно чуть дополнить мой примерчик из поста, что выше
while (<FH>) { next unless /hlds_[il]/; s/^\s+//; my @s = split /\s+/, $_; ($cpu, $mem) = ($s[8], $s[9]); if (/port\s+(\d+)\s+\+ip\s+([\d\.]+)\s+/) {$port = $1; $ip = $2;} open FT, ">", "$ip:$port.txt"; print FT "$cpu $mem\n"; close FT; } то есть, отдать на откуп perl самому grep'ать то, что нужно или так
while (<FH>) { s/^\s+//; my @s = split /\s+/, $_; ($cpu, $mem) = ($s[8], $s[9]); if (/port\s+(\d+)\s+\+ip\s+([\d\.]+)\s+/) { $port = $1; $ip = $2; open FT, ">", "$ip:$port.txt"; print FT "$cpu $mem\n"; close FT; } } по мну, так первый вариант нагляднее и понятнее то есть, нужно прочитать вывод top ? Linux на борту? у меня ключика -c в top нет
можно так, например
open FH, "-|", "/usr/bin/top"; while (<FH>) { print; } close FH; > Проблема в другом, при ручном запуске скрипта, все отрабатывает нормально. > Но когда добавляешь в крон, /usr/bin/perl /home/stat/top.pl > Всплывают косяки: > /home/stat/top.pl: 2: use: not found > /home/stat/top.pl: 3: my: not found > /home/stat/top.pl: 5: Syntax error: "(" unexpected в вашем коде, я чесгря, запутался, заблудился в трёх соснах, ниасилятор, звиняйте ))
- Perl выборка данных., fire002, 23:04 , 19-Июн-14 (8)
Проблема оказалась в другом, вывод top через крон обрезался, без вывода нужной инфы.
- Perl выборка данных., pxel, 00:48 , 09-Окт-14 (9)
> Проблема оказалась в другом, вывод top через крон обрезался, без вывода нужной > инфы.ps?
|