The OpenNET Project / Index page

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

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

"perl (фильтрация строк)" 
Сообщение от MoHaX emailИскать по авторуВ закладки(??) on 16-Июн-05, 10:40  (MSK)
Вопрос начинающего... Есть файл (дамп ipcad) вида:
   Source           Destination              Packets               Bytes
10.1.166.192     10.1.166.41                    207              151487
10.1.166.41      10.1.166.192                   178               18842
217.107.212.62   10.1.166.192                    10                1768
10.1.166.192     217.107.212.62                  10                1253
81.176.76.106    10.1.166.192                    15               14805
10.1.166.192     81.176.76.106                   15                1298
195.2.91.126     10.1.166.192                   358              106611
10.1.166.192     195.2.91.126                   345               29077
217.16.27.121    10.1.166.209                     4                1602
10.1.166.209     217.16.27.121                    5                1026
217.16.29.131    10.1.166.209                    25               26440
10.1.166.209     217.16.29.131                   18                1698
213.219.244.88   10.1.166.209                   136              127611
10.1.166.209     213.219.244.88                 113               15942
Accounting data age is   105
Accounting data age exact 6342
Accounting data saved 1118897175
Interface fxp0: received 309516, 5 m average 5710 bytes/sec, 28 pkts/sec, droppe
d 0
Flow entries made: 565
Memory usage: 0% (49720 from 16777216)
Free slots for rsh clients: 9
IPCAD uptime is  1:45
router.local uptime is 30 days 23:52

Хочу из этого файла взять данные о трафике. Как это лучше сделать? Я сделал так
#!/usr/bin/perl
open(traf, "</tmp/traflog/ipcad.dump") || die "ERROR: file not found!";
while(<traf>)
{
($ip_s, $ip_d, $packets, $bytes) = split(" ");
print "$ip_s\t  $ip_d\t $packets\t $bytes\n";
}
close(traf);
Но проблема в том, что по мимо информации о трафике в файле присутсвуют другие строчки так же разделённые пробелами, соотвественно они так же присваеваются переменным. Как этого избежать? Как я понял мне нужны строки начинающиеся с пробела и чтобы вторым символом была цифра. Как мне их так отфильтровать? Или есть другие пути решения? Вообщем просветите, ибо начинающий...

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

 Оглавление

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

1. "perl (фильтрация строк)" 
Сообщение от ihor Искать по авторуВ закладки on 16-Июн-05, 11:34  (MSK)
$ipaddr = qr/\d{1,3}(?:\.\d{1,3}){3}/;

open(FILE, "ex.txt") || die "ERROR: file not found!";
while(defined($str = <FILE>)) {
  chomp($str);
  if ($str =~ /^\s*($ipaddr)\s+($ipaddr)\s*(\d*)\s*(\d*)/) {
    $ip_s = $1;
    $ip_d = $2;
    $packets = $3;
    $bytes = $4;
  
    print "$ip_s\t  $ip_d\t $packets\t $bytes\n";
  } # if
} # while
close(FILE);

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

2. "perl (фильтрация строк)" 
Сообщение от madskull Искать по авторуВ закладки(ok) on 17-Июн-05, 11:28  (MSK)
простите, а разве
egrep '^ +[0-9.]+ ' ex.txt
не то же самое делает?
или нужно пренепременно на perl?
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


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

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




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

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