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 POSIX Discussion :

Tri de fichiers


Sujet :

Shell et commandes POSIX

  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 de fichiers
    Bonsoir à tous
    J'ai un fichier de cette forme là :

    a -> bonjour :0.5
    b -> les :0.9
    a -> les :0.2

    J'amerai trier ce fichier là : les champs séparés par les ":"
    trie croissant (ordre alphabetique) des champs se trouvant avant les ":" et trie decroissant des valeur apres les ":"

    donc on aura un fichier trie de cette forme :

    a -> bonjour :0.5
    a -> les :0.2
    b -> les :0.9

    une idée svp?
    MErci

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Normalement la commande "sort" sans aucune option devrait faire exactement ce que tu veux

  3. #3
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Bonjour.

    A l'arrache (j'ai pas trouvé d'option permettant de faire un tri dans l'ordre croissant et décroissant de manière simultanée en une commande sur différentes colonnes dans sort) :

    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    [idriss@hp-dv6:~ ]$ cat test.txt
    a -> bonjour :0.5
    b -> les :0.9
    a -> les :0.2
    [idriss@hp-dv6:~ ]$ cat test.sh
    #!/bin/ksh
     
    fichier="test.txt"
     
    i=0
    last=""
    tmp="tmpFile"
     
    while read ligne; do
        key=$(echo $ligne | cut -d ':' -f1)
        if [ "$key" != "$last" ]; then
            let i=$i+1
        fi
        echo $ligne > $tmp.$i
        last=key
    done <<< "$(sort $fichier)"
     
    for file in $tmp.*; do
        sort -nr $file
    done
     
    rm -rf $tmp.*
    [idriss@hp-dv6:~ ]$ ./test.sh
    a -> bonjour :0.5
    a -> les :0.2
    b -> les :0.9
    [idriss@hp-dv6:~ ]$
    Testé en bash et ksh sous Linux (sh ne reconnait pas la redirection "<<<" ).

    Après avec awk aussi ça doit être faisable avec des tableaux associatifs par exemple (et surement hautement préférable si tes fichiers sont volumineux).

    EDIT :

    Citation Envoyé par zipe31
    Normalement la commande "sort" sans aucune option devrait faire exactement ce que tu veux
    Sur l'exemple de résultat oui, sur la spécification indiquée non :

    Citation Envoyé par étoile de mer
    trie croissant (ordre alphabetique) des champs se trouvant avant les ":" et trie decroissant des valeur apres les ":"
    => Bref, faut choisir

    Cordialement,
    Idriss

  4. #4
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Sur l'exemple de résultat oui, sur la spécification indiquée non :

    trie croissant (ordre alphabetique) des champs se trouvant avant les ":" et trie decroissant des valeur apres les ":"
    => Bref, faut choisir
    Si si c'est possible :

    Le fichier de départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ cat bar 
    titi 01 3
    titi 10 3
    titi 04 5
    titi 03 6
    toto 03 6
    tata 01 20
    tata 5 4
    Un tri normal (alphabétique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ sort  bar 
    tata 01 20
    tata 5 4
    titi 01 3
    titi 03 6
    titi 04 5
    titi 10 3
    toto 03 6
    Tri alphabétique sur champ1 et décroissant numérique sur champ2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $ sort -k1,1 -k2nr,2nr bar 
    tata 5 4
    tata 01 20
    titi 10 3
    titi 04 5
    titi 03 6
    titi 01 3
    toto 03 6

  5. #5
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Citation Envoyé par zipe31 Voir le message
    Si si c'est possible : [...]
    =>

    Citation Envoyé par zipe31
    Normalement la commande "sort" sans aucune option
    Sans options ça reste pas possible



    Mais sinon, merci pour la syntaxe

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Testé en bash et ksh sous Linux (sh ne reconnait pas la redirection "<<<" ).
    Pour un sh ou un ksh sans '<<<', ne peut-on simplement piper la sortie du 'sort' (vu que tu ne récupères pas de valeurs de variables affectées dans la boucle 'while' (qui, sinon, seraient emprisonnées dans l'éventuel sous-process))?

    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
    17
    18
    19
    20
    21
    22
    #!/bin/sh
     
    fichier="test.txt"
     
    i=0
    last=""
    tmp="tmpFile"
     
    sort $fichier | while read ligne; do
        key=$(echo $ligne | cut -d ':' -f1)
        if [ "$key" != "$last" ]; then
            let i=$i+1
        fi
        echo $ligne > $tmp.$i
        last=key
    done
     
    for file in $tmp.*; do
        sort -nr $file
    done
     
    rm -rf $tmp.*
    ou aurais-je loupé quelque chose?

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Sur l'exemple de résultat oui, sur la spécification indiquée non
    Pour une fois que l'auteur a fait l'effort de fournir à la fois des spécifications claires et un exemple concret de fichier d'entrée et le résultat attendu, on ne va tout de même pas se plaindre que l'exemple est trop spécifique, non?

    Sinon, bomonde le ciel va nous tomber dessus...

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Sinon, bomonde le ciel va nous tomber dessus...
    Il est où notre beau monde dans le smiley ci-dessus ? Hein ?
    J'crois que j'ai trouvé mais je ne suis pas sûr que ça va l'arranger, si ?

  9. #9
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut
    Salut.

    Citation Envoyé par jack-ft
    ou aurais-je loupé quelque chose?
    Pour l'avoir fait à une époque, ça fonctionne bien mais bon je me suis habitué aux redirections après avoir reçus quelques coups

    Dans une ancienne version de la liste des exos les solutions utilisaient également le pipe pour boucler sur le contenu d'un fichier.

    Idriss

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Citation Envoyé par ok.Idriss Voir le message
    Salut.

    Pour l'avoir fait à une époque, ça fonctionne bien mais bon je me suis habitué aux redirections après avoir reçus quelques coups
    ok!

    Dans une ancienne version de la liste des exos les solutions utilisaient également le pipe pour boucler sur le contenu d'un fichier.

    Idriss
    Dans LI-C-1, je vois ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [ ~] ./NomDuScript.sh 
    Saisir une valeur : 
    4 
    2^2 = 4
    Y a du copier/coller/éditer malheureux, si jeune et déjà Mabuse...

  11. #11
    Rédacteur

    Avatar de ok.Idriss
    Homme Profil pro
    IS Consultant
    Inscrit en
    Février 2009
    Messages
    5 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2009
    Messages : 5 220
    Par défaut


    En plus il manque un double quote dans la première solution
    => Je corrige tout ça au plus tôt.

    Par contre si tu vois d'autres erreurs, reportes les sur la discussions associées histoire de ne pas trop rentrer dans le HS ici (même si on y est déjà un peu ).

    Encore

Discussions similaires

  1. tri de fichier
    Par sondess dans le forum C
    Réponses: 6
    Dernier message: 17/10/2006, 14h34
  2. [CListCtrl] Tri de fichiers
    Par Rupella dans le forum MFC
    Réponses: 19
    Dernier message: 07/09/2006, 16h40
  3. Tri de fichier avec le "sort"
    Par LFC dans le forum Langage
    Réponses: 1
    Dernier message: 08/03/2006, 07h55
  4. Tri de fichier
    Par difficiledetrouver1pseudo dans le forum Linux
    Réponses: 2
    Dernier message: 22/02/2006, 16h47
  5. [langage] tri de fichier
    Par jj77 dans le forum Langage
    Réponses: 7
    Dernier message: 16/11/2004, 16h35

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