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 :

tri et selection en langage awk


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut tri et selection en langage awk
    Bonsoir à tous
    j'ai un souci, mon prof me demande de faire un tri de mon fichier en utilisant le langage awk
    je vois pas comment faire
    bonjour le good 1
    bonjour le morning 2
    bonjour le the 0.5
    le good 1
    le morning 0.5
    le the 2
    Là il me demande de faire le tri du fichier selon la 3eme colonne : un tri decoissant pour chaque mot de la 1ere colonne
    donc on aura
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    bonjour le              morning         2
    bonjour le              good             1
    bonjour le              the               0.5
    le                          the                2 
    le                         good              1   
    le                         morning         0.5
    est ce qu'on peut faire ca avec awk?
    merci pour vos idée


    [/QUOTE]

  2. #2
    Membre chevronné Avatar de iblis
    Inscrit en
    Janvier 2007
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 58

    Informations forums :
    Inscription : Janvier 2007
    Messages : 510
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print $3,$0}' | sort -r | awk '{for (i=2;i<NF;i++) {printf "%s ",$i}; printf "%s\n",$NF}'
    Tu peux aussi utiliser la fonction sort dans le awk, par exemple si tu n'as pas de pipe de disponible sur ton système (!), et suivre la même idée : adjoindre le champs à trier en tête de ligne, trier, puis reformater.

    Bon, j'avoue que ce n'est pas une bonne idée de faire ton exo, mais si tu veux du tout awk, il te reste encore un peu de plaisir. Au fait, tu es sûr d'avoir regardé la syntaxe de awk avant de demander.

    Sinon, apprends à faire ça en Perl (ou en Python ou en Ruby ou en ...).

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

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Il te faut utiliser les tableaux awk.
    1) lire chaque ligne de ton fichier
    2) pour chaque ligne réorganiser la ligne et mettant la colonne 3 en premier puis la colonne 2.
    3) les lignes dans un tableau.

    Appliquer un algo de tri sur le tableau (1ere colonne)

    rechercher s'il y a des doublons pour la premère colonne. Si doublons trouvé trier ces doublons sur la deuxième colonne.

    Imprimer les lignes triées

  4. #4
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    Merci pour vos reponses,
    mais ca me semble un peu compliqué surtout que je suis debutante

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

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

    Informations forums :
    Inscription : Mai 2007
    Messages : 248
    Par défaut
    Citation Envoyé par étoile de mer Voir le message
    Merci pour vos reponses,
    mais ca me semble un peu compliqué surtout que je suis debutante
    Pour débuter ton problème: tableaux et tris


    Autre solution:
    1) tu lis toutes les lignes que tu stockes dans un tableau
    2) pour chaque ligne tu calcule la longueur MAX+1 des deux colonnes
    3) tu relis les lignes depuis le tableau et tu formattes tes lignes sur des longueurs fixe pour les deux colonnes uniquement. par exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    bonjour le good 1 
    bonjour le morning 2
    bonjour le the 0.5
    le good 1
    le morning 0.5
    le the 2
    donnera:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    good@@@@1@@bonjour le
    morning@2@@bonjour le
    the@@@@@0.5bonjour le
    1@@@@@@@@@@le good
    0.5@@@@@@@@le morning
    2@@@@@@@@@@le the
    les @ ne sont là que pour signaler les espaces.

    Il ne reste plus qu'a trier par AWK et a imprimer tes lignes après avoir découpé les colonnes et les avoir remises au bon endroit

  6. #6
    Membre éclairé Avatar de étoile de mer
    Profil pro
    Étudiant
    Inscrit en
    Avril 2007
    Messages
    978
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2007
    Messages : 978
    Par défaut
    merci,
    mais là c'est un peu different :
    en fait dans mon fichier jai 3 colonnes
    col1 col2 col3
    bonjour good morning 0.5
    bonjour good 0.7
    bonjour morning 1
    les good 1
    les morning 2
    là , faut pas faire le tri sur tout la tableau: mais on tri selon la col1
    tu vois?
    merci

Discussions similaires

  1. tri par selection
    Par houdabouayed dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 27/01/2007, 14h01
  2. Problème tri tutoriel selection multiple
    Par qbihlmaier dans le forum Access
    Réponses: 24
    Dernier message: 14/03/2006, 11h24
  3. TRI ET SELECTION DE CODE ALPHANUMERIQUE
    Par janpi34 dans le forum SQL
    Réponses: 2
    Dernier message: 07/05/2004, 18h41
  4. [langage] awk et sed dans script perl
    Par scoti dans le forum Langage
    Réponses: 3
    Dernier message: 07/04/2003, 18h26

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