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 avec AWK


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut Script avec AWK
    Bonjour à tous,

    Je suis étudiant en info et j'ai beaucoup de mal concernant le scripting avec linux...
    C'est pas du tout ma tasse de thé...

    J'aimerais comprendre via des exemple sur d'ancien exercice que je n'ai jamais terminé...

    Je vous explique l'exercice en question.

    A l'aide d'un script avec AWK, je dois traité un fichier CSV pour afficher des stats.

    Le fichier CSV en question est sur 3 colonnes, je met les 4 première lignes pour l'ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Type de voiture, modèle de voiture, marque de voiture
    SPORT, CLIO R.S. LINE, RENAULT
    BERLINE, ELEGANCE, HONDA
    CROSSOVER, PUMA, FORD
    ...

    Avec ce fichier CSV je dois faire :

    - Le top 5 des marques de voiture le plus cités en affichant la marque et le nombre.
    - Le top 5 des marques de voiture le moins cités en affichant la marque et le nombre.
    - Le nombre total de marque de voiture différentes en affichant juste le nombre.
    - Le nombre total de type de voiture différentes en affichant juste le nombre.

    Pour un des points cités, je trouvais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #!/usr/bin/awk -f
     
    BEGIN {
        fréquence=0;
    }
    {
    	if (fréquence[$3] == 0)
    	marque[cnt++] = $3;
    	fréquence[$3]++;
    }
    END {
        for (marque in fréquence)
    	printf "%s\t%d\n" , marque ,fréquence[marque];
    }
    Le reste j'ai pas pu.

    Je remercie par avance tout ceux qui prendront le temps d'y répondre

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

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

    Je remercie par avance tout ceux qui prendront le temps d'y répondre
    Répondre à quoi ? Je vois beaucoup de texte, mais pas de question.

    Espères-tu qu'après avoir fait 3/4 de ton devoir, on fasse le dernier quart ? Cela n'arrivera pas.
    Reviens avec des questions précises et après avoir travaillé.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    Bonjour,

    j'ai beaucoup de mal concernant le scripting avec linux...
    tu crois que ce sera différent sous W$ ?

    avant de coder, il faut formuler le raisonnement cheminement qui devrait mener au résultat attendu.

    les* "top 5" s'obtiennent en utilisant un tableau associatif dont on incrémente la valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeDmarques[marque]++
    les nombres de types et de marques s'obtiennent avec de simples variables qui sont incrémentées si le type ou la marque ne figure pas déjà dans listeDtypes ou listeDmarques.

    --
    * en fait, c'est un seul et même tableau associatif trié dans l'ordre croissant de ses valeurs, qui sera parcouru différemment (du premier au 5é, puis du dernier au derrnier-4) selon qu'on veut afficher les plus ou les moins cités
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut
    @Floredelarab : Je vais reformuler ma question mais éviter d'être agressif en donnant des conseil d'aller travailler car justement je viens ici car je demande un peu d'aide...
    Sur l'exemple du tableau CSV, je dois faire un ou plusieurs script intégrant du AWK en prenant en compte tous les points que j'ai cités avant.
    Ma question est : Comment feriez vous pour y parvenir ?

    @N Bah : D'accord je vois un peu ce que vous voulez dire. Mais le souci c'est que je n'arrive pas à l'appliquer, j'ai l'impression de ne pas avoir la logique... c'est frustrant
    Merci du conseil.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 283
    Par défaut
    Comment feriez vous pour y parvenir ?
    Je travaillerais.

    Question encore plus floue alors qu'on a demandé des questions plus précises.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut
    @Flodelarab : Vous savez, vous n'êtes pas obligé de répondre si c'est pour dire ce genre de phrase...
    Je cherche juste à avoir des avis concernant une méthodologie, des bouts de script pour finalement répondre à tous les points concernant mon problème.
    Si vous n'avez rien d'autre à dire, à part "travailler", passer votre chemin ou aller sur un autre forum embêter d'autre personne.
    Si je suis ici encore une fois, c'est pour apprendre des autres, pour être guidé ou juste aidé, soutenu, peu importe tant que ça m'aide...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    c'est la rentrée, ça le rend morose.

    quant à la méthode, elle est simple : observer comment tu ferais "à la main", et le formuler (sans code).
    il faut diviser une grande tâche en tâches plus petites; en un mot simplifier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    départ -------------------------------------------> arrivée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    départ---tourner--|           |--gauche--|
                      |-condition-|          |--->arrivée
                                  |--droite--|
    en gros.

    des fois c'est un plan vertical (une liste de choses à faire)
    des fois c'est un arbre, avec des embranchements, des boucles, des sauts...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut
    @N_BaH : Ah oui, pas bête !
    J'avais jamais vu ça sous cet angle, merci pour l'info !
    Bizarrement en pensant comme ça, ça me fait commencer par la fin

  9. #9
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut
    Par contre, je n'arrive pas à faire le top 5 avec le tableau, je ne sais pas trop comment m'y prendre.
    Quelqu'un pourrait me mettre sur la voie svp ?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    construis le tableau associatif listeDmarques[marque]++à la fin du script, il faut qu'il ait été trié (c'est facile avec gnu/awk, regarde dans le man)
    ensuite, tu affiches les cinq premiers éléments, puis les cinq derniers.
    le nombre d'élément d'un tableau s'acquiert avec len().
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2010
    Messages
    345
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 345
    Par défaut
    Citation Envoyé par SnZ91 Voir le message
    @Flodelarab : Vous savez, vous n'êtes pas obligé de répondre si c'est pour dire ce genre de phrase...
    Je cherche juste à avoir des avis concernant une méthodologie, des bouts de script pour finalement répondre à tous les points concernant mon problème.
    Si vous n'avez rien d'autre à dire, à part "travailler", passer votre chemin ou aller sur un autre forum embêter d'autre personne.
    Si je suis ici encore une fois, c'est pour apprendre des autres, pour être guidé ou juste aidé, soutenu, peu importe tant que ça m'aide...
    Bonjour,
    Oui, tu as raison, Flodelarab est tout a fait le genre de personne qui envoie chier les gens plutôt que de tenter de les aider !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 635
    Par défaut
    mouais. quand il a un truc de travers, il n'y a rien à en sortir. #eternal_september
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre à l'essai
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Mai 2021
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Mai 2021
    Messages : 6
    Par défaut
    @N_BaH : Merci pour ta réponse, je vais chercher dans cette voie là

Discussions similaires

  1. Problème dans un script avec awk
    Par vbcasimir dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 23/01/2020, 08h57
  2. Amelioration script de merge avec awk
    Par ctiguidou dans le forum Linux
    Réponses: 11
    Dernier message: 23/11/2011, 17h53
  3. Script avec sed et awk
    Par arezki76 dans le forum Shell et commandes GNU
    Réponses: 15
    Dernier message: 04/01/2007, 14h56
  4. Problème sur une cmd avec AWK
    Par OrangeBud dans le forum Linux
    Réponses: 3
    Dernier message: 02/06/2004, 10h51
  5. Script avec JOINTURE et CASE
    Par Labienus dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/02/2004, 09h40

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