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

Shell et commandes GNU Discussion :

Champs particuliers du résultat d'une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut Champs particuliers du résultat d'une commande
    Bonjour,
    Jes suis entrain de faire de l'administration de flux avec l'outil NFDump et je voudrai arranger un peu le résultat affiché.
    Lorsque je lance une première commande, le résultat retourné est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Date flow start          Duration Proto      Src IP Addr:Port           Dst IP Addr:Port   Out Pkt   In Pkt Out Byte  In Byte Flows
    2013-06-07 17:41:20.010  1769.978     0         10.0.5.6:0     <->          0.0.0.0:0            0     1300        0   391700    10
    je voudrai récupérer dans l'ordre le conrenu des champs src IP, out pkt, in pkt, out byte, in byte sous la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    src IP:out pkt:in pkt:out byte:in byte
    une deuxième commande me donne le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Date flow start          Duration       Src IP Addr   Packets    Bytes      bps    Bpp Flows
    2013-06-07 17:41:20.010  1769.978          10.0.5.6      1300   391700     1770    301    10
    je voudrai récupérer uniquement le champs bps et l'ajouter au résultat précedent.

    Comment je pourrais réaliser ceci de manière la plus rapide possible car les lignes retourné peuvent être très grand en termes de nombre.

    Merci

  2. #2
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    En fait j'ai réussi à arranger un peu plus la sortie et à récupérer les champs que je veux suivant la forme suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770
    comment je pourrais faire pour que le résultat devienne de cette forme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    65070:1300:0:391700:0:10:1769.978:1770
    merci

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Décembre 2012
    Messages : 43
    Par défaut
    avec un appel à awk ?

  4. #4
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Bon j'ai trouvé la solution je vais la poster pour ceux qui en auront besoins:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    commande |  awk 'BEGIN{OFS=":"}{print $3,$5,$6,$7,$8,$9,$10,$11 }'
    Bonne journée

  5. #5
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Bonjour,
    la commande awk m'a permi de de former le résultat affiché suivant mes besoins.
    Parmi les champs affichés, il y'a des champs tels que le nombre d'octets, le débit... qui, lorsqu'ils atteignent des grandes valeurs, une unité de mesure apparait dans la ligne affiché ce qui rend la commande awk (avec la syntaxe que j'ai utilisé inutilisable).
    Je donné un exemple,
    le champ $7 donne le nombre d'octets reçu. quand j'ai testé la commande au début ça marchait parfaitement. Mais quand ce nombre a augmenté l'unité M (méga) est apparu et est devenu le champ $8, le champs 8 devenu le champ 9 ect...
    Je voudrais modifier mon script de manière a concaténer deux champs x et y si y est une lettre non pas un réel.
    Comment je pourrais faire?
    merci

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Si on regarde ceci:
    Citation Envoyé par supcomingenieur Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770
    Tes champs semblent tabuler (a part peut-etre '->' ), tu peux donc essayer en forçant comme séparateur la tabulation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    commande |  awk -F'\t' 'BEGIN{OFS=":"}{print $3,$5,$6,$7,$8,$9,$10,$11 }'
    Les champs ne seront plus les mêmes mais une fois identifié, ils ne changeront plus. Ensuite, il faudra peut-etre rajouter un petit coups de sed pour virer le '->'

  7. #7
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    j'avoue ne pas avoir compris très bien ce que tu veux dire. Mais je vais essayé d'arranger le code un peu plus.
    Merci

  8. #8
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Je n'arrive pas à trouver la solution.
    Est ce que tu pourrais m'aider S'il te plait.
    merci

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Pour ça, il me faudrait des informations. Peux tu me donner le résultat de ta commande qui affiche:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    2013-06-07 17:41:20.010  65070 ->      1300        0   391700        0    10  1769.978     1770
    couplé à od -c
    donc:
    Si possible, un cas sans le M et un cas avec le M ?

  10. #10
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    ceci est le résultta avec M:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    0000000   2   0   1   3   -   0   6   -   1   0       1   2   :   3   7
    0000020   :   3   9   .   5   6   0                                    
    0000040   1   0   .   0   .   5   .   6       -   >                    
    0000060       8   9   0   0                                   0        
    0000100           2   .   7       M                                   0
    0000120                   8   2       1   4   6   1   1   .   1   6   0
    0000140                       1   4   9   6  \n
    0000152
    ceci est le résultat sans M:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    0000000   2   0   1   3   -   0   6   -   1   0       1   6   :   2   4
    0000020   :   4   0   .   6   1   2                                    
    0000040   1   0   .   0   .   5   .   6       -   >                    
    0000060           5   0   0                                   0        
    0000100       1   9   4   8   0   0                                   0
    0000120                       5               9   9   0   .   1   0   8
    0000140                       1   5   7   3  \n
    0000152
    J'ai une autre suggestion, je t'ai donné le résultat affiché sans entête. Si tu veux je pourrais te fournir l'entête. ça serait peu être plus simple de faire le découpage si on se base sur une entête!!
    merci

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Voici une version sed a la place du awk qui devrait fonctionner:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -r 's/([^ ]* ){2} //;s/->//;s/ ([0-9])/:\1/g;s/ *:/:/g'
    l'option -r pour ne pas à avoir à protéger les '(' ')' '{' '}'
    s/([^ ]* ){2} // pour retirer la date
    s/->// pour retirer '->'
    s/ ([0-9])/:\1/g le plus important, on remplace un espace suivi d'un nombre par un ':' et le nombre en question.
    s/ *:/:/g pour supprimer tous les espaces avant ':'

  12. #12
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Merci beaucoup ça fonctionne très bien.
    Juste une question: Est ce que la taille du résultat affiché peut avoir un impact sur la durée de traitement? c'est à dire est ce que sed est adapté pour les grand fichiers?

  13. #13
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    Je dirais autant que awk...

  14. #14
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Juste un petit détail: le résultat de la commande est maintenant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    :10.0.5.6:8900:0:2.7 M:0:82:14611.160:1496
    je voudrai enlever les deux premier points:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    10.0.5.6:8900:0:2.7 M:0:82:14611.160:1496
    merci

  15. #15
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 418
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 418
    Par défaut
    un simple sed comme ça:
    Mais si tu dois traiter un fichier d'une taille très imposante, il serait de bon ton de nous fournir les données de départ et ce que tu veux vraiment au final car coller bout à bout n commande pour filtrer ton résultat ça peut prendre beaucoup plus de temps qu'un seul filtre qui ferait la même chose en une passe.

  16. #16
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Tu as raison mais jusqu'à maintenant je ne saurais dire quelle taille le fichier pourrait atteindre.
    En fait chaque lignes correspond à un nombre de flux IP capturé et classé par adresse IP.
    Je ne sais pas combien d'adresse IP je vais avoir. Donc je présume que c'est assez grand.
    Si je rencontre un problème de lenteur je te le dirai.
    Merci

  17. #17
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 300
    Par défaut
    Bonjour

    Ton truc, c'est du bidouillage. La bonne méthode c'est de demander à commande d'arrêter d'envoyer des résultats au format humain (ko Mo Go...).

    Sinon, l'avantage de awk, c'est qu'il fait du calcul. Pour passer de Mo à ko, ou Go à Mo, il suffit de multiplier par 1024 ton champ: une condition + une multiplication

    Sinon, pour supprimer deux points, tu devrais commencer à savoir...


  18. #18
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    J'ai ajouté à ma ligne une champs temps(heures, minutes, secondes, milliemmes de secondes). Voila l'output :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    13:53:40.174:10.0.5.6:10.0.5.2:1:40
    comment je modifie ta commande sed de manière à me débarasser de la partie "millièmme de seconde (174 dans l'output), elle ne m'intéresse pas.

    Merci

  19. #19
    Membre expérimenté
    Profil pro
    Architecte de système d'information
    Inscrit en
    Mai 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 73
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Bonjour,
    plutot que de décrire ton problème goutte à goutte, comme te le disais quelqu'un pourquoi ne nous donnes tu pas un cas complet à traiter.

    En tant qu'ingénieur tu dois posséder une certaine méthodologie qui te permet d'appréhender chaque problème dans sa globalité.

    Donc:
    1) un fichier complet
    2) le format de sortie que tu désires.

  20. #20
    Membre très actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    324
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2012
    Messages : 324
    Par défaut
    Bonjour,
    Je m'excuse pour mon manque de détail. Je vous pose alors le problème au complet.
    voici le format standart de mon fichier d'origine. Il contient 100 lignes qui sont les 100 systèmes générant le plus de trafic IP. 5remarquer l'ordre des colonnes)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Date first seen          Duration Proto            Src AS    Flows(%)     Packets(%)       Bytes(%)         pps      bps   bpp
    2013-06-18 08:51:59.654  7140.215 any               37492    2.2 M(52.5)  346.4 M(50.1)   76.3 G(19.2)    48515   85.5 M   220
    2013-06-18 08:51:59.673  7138.118 any                5511   338118( 8.0)   48.2 M( 7.0)   54.3 G(13.7)     6753   60.8 M  1125
    2013-06-18 08:51:59.659  7140.131 any               15169   183338( 4.3)   31.5 M( 4.6)   39.0 G( 9.8)     4414   43.7 M  1237
    2013-06-18 08:51:59.655  7136.075 any               20940    73633( 1.7)   24.5 M( 3.5)   33.4 G( 8.4)     3431   37.4 M  1362
    2013-06-18 08:52:00.664  7139.196 any               16265    34131( 0.8)   11.9 M( 1.7)   15.4 G( 3.9)     1660   17.3 M  1302
    2013-06-18 08:51:59.761  7140.108 any               32934   191621( 4.5)   21.4 M( 3.1)   14.7 G( 3.7)     2992   16.5 M   687
    2013-06-18 08:52:06.706  7077.579 any                6762    28505( 0.7)    8.2 M( 1.2)   10.7 G( 2.7)     1155   12.1 M  1310
    2013-06-18 08:51:59.714  7140.107 any               12322    84015( 2.0)   15.0 M( 2.2)    9.9 G( 2.5)     2096   11.1 M   660
    2013-06-18 08:51:59.772  7139.997 any               22822    26327( 0.6)    7.0 M( 1.0)    9.3 G( 2.3)      983   10.4 M  1316
    2013-06-18 08:51:59.668  7079.582 any               15133    34542( 0.8)    6.1 M( 0.9)    8.0 G( 2.0)      867    9.0 M  1299
    2013-06-18 08:52:00.662  7139.158 any               47541     9507( 0.2)    3.5 M( 0.5)    4.8 G( 1.2)      485    5.4 M  1390
    je voudrais arranger l'affichage de manière a ne pas avoir ce qui est entre paranthèse (pourcentage) et aussi en tenant compte des unités G et M qui peuvent apparaitre les colonne lorsque le nombre est très grand. je donne un exemple pour la première ligne.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Src as:Bytes:packets:flows:pps:bps:bpp // ordre des colonnes voulu 
    37492:76.3 G:346.4 M:2.2 M:48515:85.5 M:220
    bien sûre puisque le fichier contient 100 lignes j'aimerai que l'expression régulière soit adaptée à un fichier de tel taille pour ne pas ralentir l'application.

    Merci d'avance puor votre aide

Discussions similaires

  1. Récupérer le résultat d'une commande shell
    Par espadon1 dans le forum Langage
    Réponses: 4
    Dernier message: 02/06/2006, 11h01
  2. Trier le résultat d'une commande dir?
    Par Johns dans le forum Langage
    Réponses: 6
    Dernier message: 13/03/2006, 18h24
  3. Récupération du résultat d'une commande shell
    Par klu dans le forum Langage
    Réponses: 8
    Dernier message: 17/02/2006, 00h34
  4. Réponses: 2
    Dernier message: 02/01/2006, 11h39
  5. Ecrire le résultat d'une commande dans un fichier de l' OS
    Par Labienus dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/02/2004, 12h04

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