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 selon colonne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut tri selon colonne
    Bonjour,

    Je suis entrain de faire un script et je suis devant la problématique suivante :

    Mon fichier il ressemble à :
    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
     
    login  date
    fon4 /02/07/2008
    fon4 /04/07/2008
    fon3 /02/07/2008
    ad226365 /01/07/2008
    fon2 /29/07/2008
    fon2 /05/08/2008
    fon1 /01/07/2008
    fon1 /01/07/2008
    PE /01/04/2007
    PE /08/04/2007
    CL1 /29/04/2007
    CL2 /25/12/2007
    ...
    Je veux trier ce fichier de sorte d'avoir les login trier et pour chaque login les dates seront triés, mais ça fait 5h que je m acharne sans résultats.

    Vous avez une astuce pour moi?

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    110
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Avril 2009
    Messages : 110
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort -n -t/ +0d -1 +3 +2 +1 Fichier

  3. #3
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Comme c'est pas forcément clair, j'essaye d'expliquer, mais j'ai un doute sur les champs (comme +0d -1...)
    Citation Envoyé par mehdi_me85 Voir le message
    sort
    -n => tri numérique par défaut
    -t/ => / est le séparateur
    +0d -1 => utilise le premier champ comme première clé de tri en alphabétique au lieu de numérique ?
    +3 => utilise le quatrième champ comme seconde clé de tri en numérique (défaut par -n)
    +2 => utilise le troisième champ comme troisième clé de tri en numérique (défaut par -n)
    +1 => utilise le second champ comme quatrième clé de tri en numérique (défaut par -n)
    Fichier
    mais la syntaxe +POS1 -POS2 me pose toujours des soucis dans sort...

    Si je me gourre pas, ceci fait la même chose (et je trouve que c'est plus clair puisqu'on donne directement la clé à utiliser):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort -n -t/ -k1d -k4 -k3 -k2 Fichier

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Citation Envoyé par Alek-C Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sort -n -t/ -k1d -k4 -k3 -k2 Fichier
    Ne donne pas le résultat escompté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ sort -n -t/ -k1d -k4 -k3 -k2 fichier
    ad226365 /01/07/2008
    CL1 /29/04/2007
    CL2 /25/12/2007
    fon1 /01/07/2008
    fon1 /01/07/2008
    fon2 /05/08/2008
    fon2 /29/07/2008
    fon3 /02/07/2008
    fon4 /02/07/2008
    fon4 /04/07/2008
    PE /01/04/2007
    PE /08/04/2007
    Je suggère:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ sort -t' ' -k 1,1 -k 2.8,2.11n -k 2.5,2.6n -k 2.2,2.3n fichier
    ad226365 /01/07/2008
    CL1 /29/04/2007
    CL2 /25/12/2007
    fon1 /01/07/2008
    fon1 /01/07/2008
    fon2 /29/07/2008
    fon2 /05/08/2008
    fon3 /02/07/2008
    fon4 /02/07/2008
    fon4 /04/07/2008
    PE /01/04/2007
    PE /08/04/2007

  5. #5
    Membre très actif

    Homme Profil pro
    Responsable projets techniques
    Inscrit en
    Février 2003
    Messages
    980
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Responsable projets techniques
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Février 2003
    Messages : 980
    Par défaut
    Effectivement : pourquoi est-ce que cela ne marche pas ?!

    Pourtant, si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ sort -n -t/ -k3 test
    login  date
    CL1 /29/04/2007
    PE /01/04/2007
    PE /08/04/2007
    ad226365 /01/07/2008
    fon1 /01/07/2008
    fon1 /01/07/2008
    fon2 /29/07/2008
    fon3 /02/07/2008
    fon4 /02/07/2008
    fon4 /04/07/2008
    fon2 /05/08/2008
    CL2 /25/12/2007
    Ca marche bien ?!

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    792
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 792
    Par défaut
    Imagine le fichier test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fon1 /01/07/2007
    fon1 /01/07/2008
    fon1 /29/06/2008
    fon1 /02/04/2008
    Si tu demandes sort -n -t/ -k3, tu demandes à sort de te trier sur le 3ème champ (le séparateur étant /, c'est donc le champ des mois) et tu obtiens logiquement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    fon1 /02/04/2008
    fon1 /29/06/2008
    fon1 /01/07/2007
    fon1 /01/07/2008
    De plus si tu prends le / comme séparateur, tu vas te retrouver avec un espace derrière le premier champ >fon1 <. Le mieux est de prendre l'espace comme séparateur et ensuite définir l'ordre de tri:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sort -t' ' -k 1,1 -k 2.8,2.11n -k 2.5,2.6n -k 2.2,2.3n fichier
    # -k 1,1 première clé de tri. Champ 1 dans son entièreté. En cas d'égalité on résoud avec...
    # ... -k 2.8,2.11n: champ 2 (les dates plus les/) depuis le caractère 8 jusqu'à 11 c-a-d les années.
    # -k 2.5,2.6n champ 2 -> les mois (car. 5 à 6)
    # -k 2.2,2.3n champ 2 -> les jours (car. 2 à 3)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri selon une colonne sur un dataset
    Par reperret dans le forum VB.NET
    Réponses: 5
    Dernier message: 14/06/2013, 10h48
  2. Tri de colonnes selon 1 critère
    Par cynoq dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2008, 14h43
  3. Tri de colonnes selon 1 critère
    Par cynoq dans le forum Excel
    Réponses: 1
    Dernier message: 23/01/2008, 21h04
  4. Tri selon une colonne
    Par ThunderBolt_ dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2007, 14h06
  5. Tri des colonnes d'une DBGRID
    Par Atrebate62 dans le forum Bases de données
    Réponses: 3
    Dernier message: 31/05/2004, 12h20

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