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 :

Script shell pour compter le nombre de mots "ok"


Sujet :

Shell et commandes GNU

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut Script shell pour compter le nombre de mots "ok"
    Bonjour mesdames,Messieurs,

    je voudrais faire un script Shell qui lit un fichier et qui compte le nombre d'un mot qui s'appelle "OK" par jour.

    Objectif :

    compter le nombre de oK par jours , la sortie ça sera le nombre de OK par jour donné

    exemple de fichier de log :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # cat info.log
    09/03/2014 15h:14min OK
    09/03/2014  18h:10min KO
    09/03/2014  18h:10min KO
    09/03/2014 18h:13min OK
    10/03/2014 18h:20min OK
    10/03/2014 18h:30min OK
    10/03/2014 10h:50min OK
    10/03/2014 14h:30min KO
    10/03/2014 16h:20min ko
    OS : centos


    Quelqu'un peut donner des pistes à cet homme pour le rendre heureux

    merci beaucoup.

    n'importe quelle piste aura la bienvenue

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

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

    Comment lire/parser un fichier


    sans tenter de coder, comment ferais-tu (à la main) ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    Merci bcp N_bah

    d'aprés la lecture de ce post.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read OK 
    do line="$OK"
       echo "$line"
    done < info.log
    mais pour calculer le nombre de OK qui existe dans le fichier ; comment je peux faire ?

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    - parcourir le fichier
    - tester le dernier champ vaut "OK"
    - tester l'existence de la mémorisation du premier champ
    - alors, tester la mémorisation du premier vaut le premier champ
    - sinon afficher résultat, mémoriser premier champ, purger résultat
    - sinon, mémoriser premier champ
    - incrémenter résultat
    - afficher résultat.

    voilà, sans tenter de coder !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    des pistes pour le code svp

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Comment lire/parser un fichier

    on va vite tourner en rond, parce qu'on ne va pas faire ton exercice !
    on corrigera ton code, t'apportera des explications.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while read OK 
    do line="$OK"
       echo "$line"
    done < info.log
    wc -l $line
    est ce correct ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    tu écris du code sans avoir de shell sous la main ?

    mais, non, ce n'est pas correct.
    coder sans shell non plus

    il faut séparer les champs sur la ligne pour en faire autant de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ cat fichier
    foo bar baz
    $ read a b c <fichier
    $ echo "$c"
    baz
    chaque assignation écrase la précédente :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ var=foo
    $ var=bar
    $ echo "$var"
    bar
    il faut incrémenter le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ var=$((var+1))
    $ var=$((var+1))
    $ echo $var
    2
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    # cat info.log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    09/03/2014 15h:14min OK
    09/03/2014  18h:10min KO
    09/03/2014  18h:10min KO
    09/03/2014 18h:13min OK
    10/03/2014 18h:20min OK
    10/03/2014 18h:30min OK
    10/03/2014 10h:50min OK
    10/03/2014 14h:30min KO
    10/03/2014 16h:20min ko
    calculer le nombre de OK qui existe dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var=ok
    read OK < /root/info.log
    echo "$ok"
    wc -l $OK
    avez-vous des corrections à m'aporter pour rendre cet homme heureux

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Bêtement, j'aurais fait un
    grep -c
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    Bonjour

    +1

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat comptageokko.txt 
    09/03/2014 15h:14min OK
    09/03/2014  18h:10min KO
    09/03/2014  18h:10min KO
    09/03/2014 18h:13min OK
    10/03/2014 18h:20min OK
    10/03/2014 18h:30min OK
    10/03/2014 10h:50min OK
    10/03/2014 14h:30min KO
    10/03/2014 16h:20min ko
    $ grep -c OK comptageokko.txt 
    5
    $
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  12. #12
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    le grep -c marche parfaitement

    comment je peux faire un grep -c juste des "OK" de la journée sachant que le petit probléme la date sous cette format : 2014 Mar 10
    c'est pas une format standard :s

    avez-vous une idée pour compter le nombre de ok par jour par exemple on est le 11 il compte les ok de 11 mars.

    dans le shell il y a que les formats suivants : DATE=`date +%Y-%m-%d`

    y-a-t-il une format comme ça : 2014 Mar 11

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    j'ai trouvé le bon format que je cherchais

    date=`date "+%Y %h %d"`

    comment je peux faire un grep -c de nombre de OK de la date date=`date "+%Y %h %d".
    Avez-vous des pistes svp

    comment je peux utiliser :
    read
    while
    read
    done
    echo

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    En matière de fichiers texte, il faut avoir le réflexe grep, sed, awk.

    Ici, avec le fichier original:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $ cat comptageokko.txt 
    09/03/2014 15h:14min OK
    09/03/2014  18h:10min KO
    09/03/2014  18h:10min KO
    09/03/2014 18h:13min OK
    10/03/2014 18h:20min OK
    10/03/2014 18h:30min OK
    10/03/2014 10h:50min OK
    10/03/2014 14h:30min KO
    10/03/2014 16h:20min ko
    $ awk '{a[$1]++;} END{for (i in a) print i,a[i];}' comptageokko.txt 
    09/03/2014 4
    10/03/2014 5
    $ awk '/OK/{a[$1]++;} END{for (i in a) print i,a[i];}' comptageokko.txt 
    09/03/2014 2
    10/03/2014 3
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  15. #15
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    avec cette commande awk '{a[$1]++;} END{for (i in a) print i,a[i];}' on a les deux jours 9 et 10.
    est ce qu'il y a une option pour avoir la journée ( juste le 11 mars ). sachant que la dificulté c'est le format qui est un peu bizzare 2014 mar 11

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    On a pas seulement les jours 9 et 10 mais tous les jours du fichier.

    Je déconseille de changer le bon format de date "10/03/2014" pour un mauvais format de date "2014 mar 10".
    Si tu veux inverser, préfère "2014/03/10".

    Enfin, si tu ne veux que le jour du 11:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ awk '{a[$1]++;} END{print "11/03/2014",int(a["11/03/2014"]);}' comptageokko.txt 
    11/03/2014 0
    (le int() est là uniquement pour écrire "0" au lieu d'un espace, dans le cas où la date est absente du fichier, comme c'est le cas ici.)
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

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

    Si ton fichier de log est ordonné (au moins pour la date):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ cat compteok
    09/03/2014 15h:14min OK
    09/03/2014  18h:10min KO
    09/03/2014  18h:10min KO
    09/03/2014 18h:13min OK
    10/03/2014 18h:20min OK
    10/03/2014 18h:30min OK
    10/03/2014 10h:50min OK
    10/03/2014 14h:30min KO
    10/03/2014 16h:20min ko
    $ sed -n '/OK$/s/ .*$//p' compteok | uniq -c
          2 09/03/2014
          3 10/03/2014
    Cordialement.

  18. #18
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/OK/{a[$1]++;} END{print "11/03/2014",int(a["11/03/2014"]);}'  log03.log

    Est ce que on peut mettre cette commande dans un script avec la date en variable pour que ce soit automatique

    Merci bcp

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 459
    Points
    13 459
    Par défaut
    La réponse est dans le message #14.
    Compare les deux commandes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '/OK/{a[$1]++;} END{print "11/03/2014",int(a["11/03/2014"]);}'
    "OK" n'est pas pris, ici, en tant que texte mais en tant qu'expression régulière présente dans la ligne. Comme pour un grep.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  20. #20
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    53
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2013
    Messages : 53
    Points : 0
    Points
    0
    Par défaut
    puis-je faire deux grep -c ? grep -c ok grep -c 2014/03/11

Discussions similaires

  1. script php pour compter le nombre total de lignes d'un projet en php
    Par ypcman dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 7
    Dernier message: 29/12/2015, 16h57
  2. Réponses: 3
    Dernier message: 03/04/2011, 21h25
  3. Réponses: 2
    Dernier message: 15/06/2009, 18h41
  4. Réponses: 3
    Dernier message: 08/07/2008, 11h06
  5. Réponses: 16
    Dernier message: 06/06/2008, 21h25

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