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 multi-critères ou tri avec clés multiples


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut Tri multi-critères ou tri avec clés multiples
    Bonjour,

    Je n'arrive pas à trier ce fichier :

    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
    $ cat fichier.csv 
    20180618;Libelle1;CLE1;71
    20180727;Libelle1;CLE1;9
    20180702;Libelle1;CLE1;62
    20190815;Libelle1;CLE1;45
    20180905;Libelle1;CLE1;1
    20200907;Libelle1;CLE1;25
    20191023;Libelle2;CLE2;58
    20201023;Libelle2;CLE2;86
    20181205;Libelle3;CLE3;45
    20170328;Libelle3;CLE3;51
    20180612;Libelle3;CLE3;23
    20180904;Libelle3;CLE3;55
    20191205;Libelle3;CLE3;24
    20170328;Libelle3;CLE3;15
    20180612;Libelle3;CLE3;29
    20190904;Libelle3;CLE3;37
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;11
    20101211;Libelle4;CLE4;8
    avec le tri :
    1/ champ n°3 CLE croissante
    2/ champ n°1 DATE décroissante

  2. #2
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Bonjour,

    Ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat unsorted.txt | sort -t";" -k3,3 -k1,1nr
    20190815;Libelle1;CLE1;45
    20180905;Libelle1;CLE1;1
    20180727;Libelle1;CLE1;9
    20180702;Libelle1;CLE1;62
    20180618;Libelle1;CLE1;71
    20201023;Libelle2;CLE2;86
    20191023;Libelle2;CLE2;58
    20191205;Libelle3;CLE3;24
    20190904;Libelle3;CLE3;37
    20181205;Libelle3;CLE3;45
    20180904;Libelle3;CLE3;55
    20180612;Libelle3;CLE3;23
    20180612;Libelle3;CLE3;29
    20170328;Libelle3;CLE3;15
    20170328;Libelle3;CLE3;51
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;11
    20101211;Libelle4;CLE4;8
    Note : j'ai tapé "linux sort column position mix descending ascending" sous goo*gle pour trouver la syntaxe

  3. #3
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Merci vttman, je regarde demain sur la machine concernée.

    Développeur Mainframe : ça veut dire ES9000 CICS DB2 ?

  4. #4
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Citation Envoyé par Liamm Voir le message
    Merci vttman, je regarde demain sur la machine concernée.

    Développeur Mainframe : ça veut dire ES9000 CICS DB2 ?
    Oui CICS/DB2 ça j'ai fait aussi ;-)

    Mais "développeur Mainframe" c'est pour indiquer que je travaille en semaine, en général sur des vieux trucs ...
    ... et le WE je fais autre chose pour varier ... là pour Linux ça tombait bien car j'installais justement un PC sous Debian alors j'étais le nez dans les commandes ....

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Bonjour,

    rappel du contenu du fichier test :
    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
    $ cat fichier.csv 
    20101211;Libelle4;CLE4;8
    20180618;Libelle1;CLE1;71
    20200907;Libelle1;CLE1;25
    20191023;Libelle2;CLE2;58
    20181205;Libelle3;CLE3;45
    20170328;Libelle3;CLE3;51
    20180612;Libelle3;CLE3;23
    20180727;Libelle1;CLE1;9
    20180904;Libelle3;CLE3;55
    20191205;Libelle3;CLE3;24
    20170328;Libelle3;CLE3;15
    20180905;Libelle1;CLE1;1
    20180612;Libelle3;CLE3;29
    20190904;Libelle3;CLE3;37
    20181211;Libelle4;CLE4;4
    20201023;Libelle2;CLE2;86
    20180702;Libelle1;CLE1;62
    20170328;Libelle4;CLE4;11
    20190815;Libelle1;CLE1;45
    20170328;Libelle4;CLE4;42

    En effet la commande marche très bien :
    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
    $ sort -t";" -k3,3 -k1,1nr fichier.csv
    20200907;Libelle1;CLE1;25
    20190815;Libelle1;CLE1;45
    20180905;Libelle1;CLE1;1
    20180727;Libelle1;CLE1;9
    20180702;Libelle1;CLE1;62
    20180618;Libelle1;CLE1;71
    20201023;Libelle2;CLE2;86
    20191023;Libelle2;CLE2;58
    20191205;Libelle3;CLE3;24
    20190904;Libelle3;CLE3;37
    20181205;Libelle3;CLE3;45
    20180904;Libelle3;CLE3;55
    20180612;Libelle3;CLE3;23
    20180612;Libelle3;CLE3;29
    20170328;Libelle3;CLE3;15
    20170328;Libelle3;CLE3;51
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;11
    20170328;Libelle4;CLE4;42
    20101211;Libelle4;CLE4;8

    mais je n'arrive pas à comprendre pourquoi ma commande ne marchait pas :
    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
    $ sort -t";" -k3 -k1r fichier.csv
    20180905;Libelle1;CLE1;1
    20200907;Libelle1;CLE1;25
    20190815;Libelle1;CLE1;45
    20180702;Libelle1;CLE1;62
    20180618;Libelle1;CLE1;71
    20180727;Libelle1;CLE1;9
    20191023;Libelle2;CLE2;58
    20201023;Libelle2;CLE2;86
    20170328;Libelle3;CLE3;15
    20180612;Libelle3;CLE3;23
    20191205;Libelle3;CLE3;24
    20180612;Libelle3;CLE3;29
    20190904;Libelle3;CLE3;37
    20181205;Libelle3;CLE3;45
    20170328;Libelle3;CLE3;51
    20180904;Libelle3;CLE3;55
    20170328;Libelle4;CLE4;11
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;42
    20101211;Libelle4;CLE4;8
    Dans le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sort -t";" -k3,3 -k1,1nr fichier.csv
    Le premier "3" rencontré signifie que l'on tri d'abord sur le troisième champ.
    Mais que signifie le second "3" après la virgule ?

    Même question pour les "1" ?

  6. #6
    Membre Expert Avatar de vttman
    Homme Profil pro
    Développeur "couteau mosellan"
    Inscrit en
    Décembre 2002
    Messages
    1 140
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur "couteau mosellan"
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 140
    Par défaut
    Le premier "3" rencontré signifie que l'on tri d'abord sur le troisième champ
    et le second spécifie qu'on ne prend que ce 3ème champ et qu'on ne va pas plus loin (on pourrait ajouter les colonnes suivantes)


    Ainsi serait équivalent ici (car on n'a que 4 champs dans ce csv) à

  7. #7
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Je pense avoir compris.

    Par exemple, si on lance le
    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
    $ sort -t";" -k3,4 -k1,1nr fichier.csv
    20180905;Libelle1;CLE1;1
    20200907;Libelle1;CLE1;25
    20190815;Libelle1;CLE1;45
    20180702;Libelle1;CLE1;62
    20180618;Libelle1;CLE1;71
    20180727;Libelle1;CLE1;9
    20191023;Libelle2;CLE2;58
    20201023;Libelle2;CLE2;86
    20170328;Libelle3;CLE3;15
    20180612;Libelle3;CLE3;23
    20191205;Libelle3;CLE3;24
    20180612;Libelle3;CLE3;29
    20190904;Libelle3;CLE3;37
    20181205;Libelle3;CLE3;45
    20170328;Libelle3;CLE3;51
    20180904;Libelle3;CLE3;55
    20170328;Libelle4;CLE4;11
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;42
    20101211;Libelle4;CLE4;8
    je vois bien que le premier tri se fait sur le champ : {"le troisième";"et le quatrième"}
    car on a mis dans la commande ",4";
    et donc comme le champ n°4 contient des valeurs toutes différente pour une même clé du champ n°3, il est inutile ensuite de trier sur le champ n°1;
    car ce tri n'aura aucun effet.

    Sachant cela, on peut donc aussi coder ainsi :
    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
    $ sort -t";" -k3,3 -k1nr fichier.csv
    20200907;Libelle1;CLE1;25
    20190815;Libelle1;CLE1;45
    20180905;Libelle1;CLE1;1
    20180727;Libelle1;CLE1;9
    20180702;Libelle1;CLE1;62
    20180618;Libelle1;CLE1;71
    20201023;Libelle2;CLE2;86
    20191023;Libelle2;CLE2;58
    20191205;Libelle3;CLE3;24
    20190904;Libelle3;CLE3;37
    20181205;Libelle3;CLE3;45
    20180904;Libelle3;CLE3;55
    20180612;Libelle3;CLE3;23
    20180612;Libelle3;CLE3;29
    20170328;Libelle3;CLE3;15
    20170328;Libelle3;CLE3;51
    20181211;Libelle4;CLE4;4
    20170328;Libelle4;CLE4;11
    20170328;Libelle4;CLE4;42
    Merci,
    beau temps en Lorraine !

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

Discussions similaires

  1. [XL-2007] Tri avec choix multiple - Bouton
    Par Barbenault dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/10/2014, 13h11
  2. Liste avec dictionnaire, tri des clés et sélection des variables
    Par CandyCH dans le forum Général Python
    Réponses: 8
    Dernier message: 07/12/2012, 21h56
  3. Réponses: 5
    Dernier message: 10/02/2011, 09h37
  4. [E-03] Sort, tri avec 4 critères?
    Par drakkar_agfa dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 23/10/2008, 19h54
  5. formulaire tri multi critère
    Par laurent.w dans le forum IHM
    Réponses: 9
    Dernier message: 13/12/2006, 12h47

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