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 :

Exercice script shell


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 8
    Points : 6
    Points
    6
    Par défaut Exercice script shell


    Ecrivez un script shell permettant de compter le nombre de requêtes en erreur et le pourcentage qu'elles représentent du nombre total de requête à partir du fichier de log ci-dessous.
    Sachant que le fichier est formaté comme indiqué ci-après:
    • hôte (ou adresse IP)
    • date
    • requête
    • statut de la requête
    • taille de la requête

    Et qu'un code statut différent de 200 correspond à une erreur.

    j'arrive pas a comprener ce exercice
    merci de m'explique
    Images attachées Images attachées  

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Bonjour,

    tu dois retrouver deux choses
    • le nombre total de lignes du fichier log
    • le nombre de ligne pour lesquelles le statut (apparemment, le numéro de ce champ est égal au nombre de champs moins 1: c'est toujours l'avant-dernier !) n'est pas égal à 200
    pour les pourcentages, ça ira ?

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Salut quand-même
    Il te faut traiter le fichier de log ligne par ligne. Et à chaque ligne extraire les infos qui t'intéressent et alimenter différents compteurs pour, en fin de fichier, afficher les stats.

    Exemple pour traiter un fichier "fic" ligne par ligne
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read lig
    do
        echo $lig
    done < fic

    Quand aux extractions, il te faudra jouer du cut et éventuellement du awk. cut est plus léger et plus rapide mais plus limité. awk est plus lourd mais plus puissant

    Exemple pour sortir le 2° mot d'une variable "var" (en considérant que chaque mot est séparé du suivant par un et un seul espace)
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $var |cut -f2 -d' '

    Même exemple mais en considérant que chaque mot est séparé du suivant par un ou plusieurs espaces ou tabulations
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $var |awk '{print $2}'

    Voilà. Bon courage. Poste-nous tes essais et on te les commentera...

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    Calcul du nombre de ligne qui ont un statut OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbOK=`cat <ton fichier de log> | awk '{print $7}' |grep 200 | wc -l`
    echo "Le nombre de statut 200 est : ${nbOK}"
    Calcul du nombre de ligne qui ont un statut KO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbKO=`cat <ton fichier de log> | awk '{print $7}' |grep -v 200 | wc -l`
    echo "Le nombre de statut 200 est : ${nbKO}"
    Il faut juste s'assurer que cat <ton fichier de log> | awk '{print $7}' renvoie bien le staut, ici j'ai compté que le statut est le 7ème élement (print $7), si ce n'est pas bon, tu mets le bon chiffre

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 596
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 596
    Points : 19 481
    Points
    19 481
    Par défaut
    Bonjour,

    ça fait faire un peu mal, mais ça ira mieux après :
    cat, grep, wc sont inutiles (surtout cat !)

    ne reste que awk

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juin 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    C'était une proposition.
    Mais je ne connais pas tout sur awk.

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    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 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bonjour,

    Et encore, awk, c'est quand on est gentil
    Sinon, la proposition avec les grep 200 et grep -v 200 ne fonctionneront pas dans ce cas précis...
    En gros cela retournera que des OK et pas de KO

    [MODIF] Avais pas vu le awk pour la récupération du champs [/MODIF]

  8. #8
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 276
    Points : 13 553
    Points
    13 553
    Par défaut
    C'est au moins le 10e champ.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 311
    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 311
    Points : 12 830
    Points
    12 830
    Par défaut
    Bon pour me rattraper, et comme je sous-entendais, la version builtin bash:
    (Le plus dur a été de trouver des log ressemblant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ cat log-ap.log
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 400 2356
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 400 2356
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 400 2356
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    127.0.0.1 - - [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ cat ./script.sh
    #!/bin/bash
    unset KO OK
    while read a
    do
     set -- $a
     shift $(($# - 2))
     [ $1 -eq 200 ] && OK=$(($OK + 1)) || KO=$(($KO + 1))
    done<log-ap.log
    echo il y a $KO erreurs qui représente un taux de $(($KO * 100 / ($OK + $KO)))%
    ce qui donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ ./script.sh
    il y a 3 erreurs qui représente un taux de 27%

Discussions similaires

  1. deux exercices de scripts shell à résoudre
    Par sadiqmrd dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 04/06/2011, 21h25
  2. [JSP] script shell
    Par goolix dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 06/08/2004, 10h08
  3. Exécution d'un script shell
    Par Manu0086 dans le forum Linux
    Réponses: 8
    Dernier message: 15/06/2004, 17h31
  4. Explication script shell
    Par crasho007 dans le forum Linux
    Réponses: 2
    Dernier message: 14/06/2004, 14h54
  5. Cron + terminal + script shell
    Par nicolas.pissard dans le forum Linux
    Réponses: 3
    Dernier message: 17/03/2004, 10h24

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