[Perl] Split en regex combineren

Pagina: 1
Acties:

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

Topicstarter
Ik zit al tijden met de volgende vraag op. Als ik een string heb waar ik meerdere waardes uit wil halen en deze in verschillende variabelen wil stoppen doe ik dit altijd in 2 stappen. Eerst met een regex tot iets begrijpelijks voor split klussen en dan de split zelf doen.

code:
1
2
3
4
5
6
7
@interface_names=`snmpwalk -c $commstring $capid IF-MIB::ifDescr`;
my ($interface,$interface_no,$interface_name);
foreach $interface (@interface_names) {
$interface=~s/IF-MIB::ifDescr\.(\d+)\s=\sSTRING:\s(\w+)\n/$1:$2/g;
($interface_no,$interface_name)=split(/:/,$interface);
$router_int{$capid}{$interface_no}=$interface_name;
}

het gaat dan om regel 4 en 5. Dit moet volgens mij in een keer kunnen ik kan echter maar niet vinden hoe.

iemand enig idee

  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

is het niet makkelijker als je een snmp module gebruikt voor perl?
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use Net::SNMP;
($s, $e) = Net::SNMP->session(
  -hostname  => $ARGV[0],
  -community => "public",
  -timeout => 10,
  -version => 1
);
$next = ".1.3.6.1.2.1.2.2.1.1";
$result = $s->get_table($next);
foreach $key (sort keys %$result){ 
$oid = ".1.3.6.1.2.1.2.2.1.2.$$result{$key}";
$response = $s->get_request($oid);
$ifDescr = $response->{$oid};
print "$ifDescr\n";
}
$s->close();
exit 0;

[ Voor 12% gewijzigd door Oezie Woezie op 04-10-2004 07:58 ]

een mooi Tshirt met Pim. is de beste enzo


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

Topicstarter
mischien wel maar over het algemeen zijn de Perl Modules op onze SUNS enigzins brak. Zal er wel eens naar kijken. Ze staan er wel zo te zien. ben namelijk wel benieuwd of dit sneller gaat

  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Zoiets?:
code:
1
2
($interface_no,$interface_name) =
    ($interface=~/IF-MIB::ifDescr\.(\d+)\s=\sSTRING:\s(\w+)\n/);


edit:
bovenstaande moet wel werken (een vergelijkbaar voorbeeld staat in de perlop manual). Ik moet niet posten zo vroeg in de morgen ;)

[ Voor 52% gewijzigd door rvm op 04-10-2004 09:40 ]


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

Topicstarter
hmm dit werkt (nog) niet in de variable $interface_no zit alleen de waarde 1 en in $interface_name zit niks :?

die 1 is dus het aantal replacements

[ Voor 16% gewijzigd door TrailBlazer op 04-10-2004 08:55 ]


  • rvm
  • Registratie: November 2000
  • Niet online

rvm

Oops, die werkt inderdaad niet, omdat s/pattern/replace/ alleen het aantal replacements teruggeeft. Doe je echter /pattern/, dan geeft dit mooi de lijst met gematchte subexpressions terug (code aangepast in vorige post), tenminste in een 'list context'.

  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

Topicstarter
thx zo werkt het. Nu enkel nog even kijken wat sneller is. Met een snmpwalk/snmpget of de NET::SNMP module.


voor de mensen die het graag willen weten. Een snmpget op 32 routers geeft nauwlijks snelheids verschil tussen snmpwalk/snmpget of met de SNMP module. Wel vraagt de module minder processor tijd. Maar of je dat open SUN V240 merkt weet ik niet

[ Voor 55% gewijzigd door TrailBlazer op 04-10-2004 12:57 ]


  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

TrailBlazer schreef op 04 oktober 2004 @ 09:52:
thx zo werkt het. Nu enkel nog even kijken wat sneller is. Met een snmpwalk/snmpget of de NET::SNMP module.


voor de mensen die het graag willen weten. Een snmpget op 32 routers geeft nauwlijks snelheids verschil tussen snmpwalk/snmpget of met de SNMP module. Wel vraagt de module minder processor tijd. Maar of je dat open SUN V240 merkt weet ik niet
is dat getest met 1 OID of met meerdere?

een mooi Tshirt met Pim. is de beste enzo


  • TrailBlazer
  • Registratie: Oktober 2000
  • Laatst online: 17-05 12:43

TrailBlazer

Karnemelk FTW

Topicstarter
op dit moment met een Ik zal wel postem asl ik klaar ben. Hoewel dan moet ik alles dubbel schrijven heb ik ook weinig zin in. Het scheelt denk ik vooral met de regexen die ik ander continue moet doen om alles eruit te filteren. In totaal zal het om een element of 500 gaan

  • Oezie Woezie
  • Registratie: December 1999
  • Niet online

Oezie Woezie

Pim. is de beste

en trouwens je kan met snmpwalk ook de opties "-O vq" meegeven.
q: quick print for easier parsing
v: print values only (not OID = value)

code:
1
2
3
4
5
6
snmpwalk -O qv -c public haas IF-MIB::ifDescr
lo
sit0
eth0
sit2
sit1

een mooi Tshirt met Pim. is de beste enzo

Pagina: 1