IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Trouver le nombre de valeurs avec recherche dans fichier


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Par défaut Trouver le nombre de valeurs avec recherche dans fichier
    Bonjour,

    ça fait un petit moment que je n'ai pas programmé et je ne gère pas le Perl.
    je dois cependant extraire des valeurs en perl afin de pouvoir l'intégré dans un autre script (utilisation pour Nagios)

    J'ai fait plusieurs recherche. J'ai récupéré plusieurs scripts et j'avance petit à petit. Mais j'avoue que je bloque sur plusieurs points (notamment sur les recherches). y'a plusieurs scripts qui correspondent à ce que je veux faire, mais je n'arrive pas à adapter.
    Un petit coup de main me serait bien utile

    Donc, voici mon problème:

    j'ai un fichier texte du type (extrait la table ARP d'un routeur):export.txt
    Protocol Address Age (min) Hardware Addr Type Interface
    Internet 10.10.0.1 - 7fda.f9a2.c920 ARPA GigabitEthernet0/0.10
    Internet 10.90.0.1 - 77bd.fdd2.c910 ARPA GigabitEthernet0/0.90
    Internet 10.100.1.1 - 7idu.f9a2.c780 ARPA GigabitEthernet0/0.14
    Internet 10.100.1.5 8 9fd6.6525.6040 ARPA GigabitEthernet0/0.14
    Internet 10.100.1.7 0 bfdd.eb0c.1976 ARPA GigabitEthernet0/0.14
    Internet 10.100.1.11 111 8dd5.17f7.33cf ARPA GigabitEthernet0/0.14
    Internet 10.100.1.12 187 ddb5.17fd.fec1 ARPA GigabitEthernet0/0.14
    Internet 10.100.1.33 0 2cc5.d333.5f00 ARPA GigabitEthernet0/0.14

    Mon but est de trouver le nombre de poste d'une interface en particulier qui possède une valeur age inférieur à 10.

    Donc dans mon exemple:
    - pour l'interface GigabitEthernet0/0.10 = 1
    - pour l'interface GigabitEthernet0/0.14 = 4

    j'arrive à faire la recherche sur mon élément d'interface mais je n'arrive pas à récupérer la valeur age pour faire le tri.

    C'est des espaces qui sont entre les colonnes (nombre variable)

    Merci beaucoup.

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    il y a plusieurs manières de faire, mais le plus simple est sans doute d'utiliser la fonction split pour récupérer, pour chaque ligne, un tableau de valeur. Le troisième élément (élément d’indice 2) de chaque tableau sera ton âge.

    Voici un exemple de traitement d'une ligne sous le debuger Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      DB<1> $ligne = "Internet 10.10.0.1 - 7fda.f9a2.c920 ARPA GigabitEthernet0/0.10"
     
      DB<2> @valeurs = split /\s+/, $ligne;
     
      DB<3> x @valeurs;     # affichage du tableau
    0  'Internet'
    1  '10.10.0.1'
    2  '-'
    3  '7fda.f9a2.c920'
    4  'ARPA'
    5  'GigabitEthernet0/0.10'
      DB<4> print $valeurs[2];
    -

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 987
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 987
    Par défaut
    Tu peux utiliser Perl à la manière de awk avec l'option -a (autosplit), ce qui donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -lane '$res{$F[5]}++ if $F[2]=~/^[\d-]$/; END{print "$_: $res{$_}" for keys %res}' export.txt

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2014
    Messages : 5
    Par défaut
    Bonjour,

    Merci beaucoup pour vos réponses.
    j'ai pu faire mon script et trouver mes valeurs souhaitez.

    Encore MERCI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. nombre de valeurs non nulles dans une tables
    Par 080983 dans le forum SQL
    Réponses: 33
    Dernier message: 27/08/2007, 13h04
  2. [Tableaux] Comparaison avec recherche dans un tableau
    Par Hotfirenet dans le forum Langage
    Réponses: 4
    Dernier message: 26/08/2007, 23h24
  3. Réponses: 1
    Dernier message: 05/06/2007, 09h55
  4. Réponses: 7
    Dernier message: 20/07/2006, 11h29
  5. Réponses: 17
    Dernier message: 18/03/2005, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo