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 :

Un "vrai" tri en shell ou awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut Un "vrai" tri en shell ou awk
    Bonjour à tous
    Suite à petit programme en mélange de awk et shell j'obtiens un fichier que je souhaite trier sur plusieurs colonnes mais la commande tri (sort) me pose quelques soucis et je ne trouve rien en awk

    mon fichier de départ = fic1 est de type
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    col1 col2 var1 var2 h1 h2
    10 11 0.46585 0.45304 0.26612 0.11821
    3 10 0.30274 0.46261 0.38001 0.12164
    3 11 0.29714 0.45030 0.67664 0.80811E-01
    3 4 0.29344 0.23612 0.87633 0.40339E-01
    3 9 0.30473 0.12433 -0.37703 0.22029
    4 13 0.23579 0.32574 0.76885 0.68132E-01
    4 14 0.23536 0.32237 0.76262 0.69857E-01
    4 5 0.23513 0.25724 0.84904 0.51867E-01
    4 9 0.23955 0.12694 -0.43368 0.22753
    5 10 0.26563 0.32722 0.91645 0.28555E-01
    Je souhaite que col1 soit trié de 1 à 10 puis col2 de 1 à 10 également

    un sort -n ou sort -k1n ou un sort -k1n,2n fic1 me renvoie systématiquement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    col1 col2 var1 var2 h1 h2
    3 4 0.29344 0.23612 0.87633 0.40339E-01
    3 9 0.30473 0.12433 -0.37703 0.22029
    4 5 0.23513 0.25724 0.84904 0.51867E-01
    4 9 0.23955 0.12694 -0.43368 0.22753
    5 10 0.26563 0.32722 0.91645 0.28555E-01
    3 10 0.30274 0.46261 0.38001 0.12164
    3 11 0.29714 0.45030 0.67664 0.80811E-01
    4 13 0.23579 0.32574 0.76885 0.68132E-01
    4 14 0.23536 0.32237 0.76262 0.69857E-01
    10 11 0.46585 0.45304 0.26612 0.11821
    Existe t'il un tri en shell ou awk qui prenne en compte la colonne souhaiter? j'aurai aimé en awk quelquechose type sort $1, $2
    mais apparemment non ....

    Autre question si je veut trier var1 par ordre croissant, il faut que je fasse
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print $3; $1;$2;$4;$5;$6}' fic1 | sort-n > fic2
    Ensuite je dois remettre mes colonnes dans le bon ordre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{print $2;$3; $1;$4;$5;$6}' fic1 | sort-n > fic2
    ou Existe t'il quelque chose de plus simple ?

    Merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sort -k1,2n fichier
    col1 col2 var1 var2 h1 h2
    3 10 0.30274 0.46261 0.38001 0.12164
    3 11 0.29714 0.45030 0.67664 0.80811E-01
    3 4 0.29344 0.23612 0.87633 0.40339E-01
    3 9 0.30473 0.12433 -0.37703 0.22029
    4 13 0.23579 0.32574 0.76885 0.68132E-01
    4 14 0.23536 0.32237 0.76262 0.69857E-01
    4 5 0.23513 0.25724 0.84904 0.51867E-01
    4 9 0.23955 0.12694 -0.43368 0.22753
    5 10 0.26563 0.32722 0.91645 0.28555E-01
    10 11 0.46585 0.45304 0.26612 0.11821

  3. #3
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour N_BaH
    En faisant cette commande je n'obtiens pas cela.... C'est étrange
    Mon "3 10 " se situe après mon "4 9"
    Y'a t'il des shell non compatibles avec certaines versions (je suis sur serveur et pas possibilité d'avoir un linux "perso" sur mon ordi)

    Suis-je le seul à avoir ce type de problème ?

    Merci pour vos infos

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut
    je suppute un format de fichier non-UNIX...

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    Bonjour

    @ N_BaH : chez toi, "3 11" est avant "3 4" ...

    Je ne sais pas ce que trafique "sort", mais il a un problème avec les chiffres, quand le séparateur de champs est une simple espace.
    Il m'arrive de rajouter une lettre entre les champs, ou de changer carrément le séparateur de champs.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sed 's/ /;/g' fichier
    col1;col2;var1;var2;h1;h2
    10;11;0.46585;0.45304;0.26612;0.11821
    3;10;0.30274;0.46261;0.38001;0.12164
    3;11;0.29714;0.45030;0.67664;0.80811E-01
    3;4;0.29344;0.23612;0.87633;0.40339E-01
    3;9;0.30473;0.12433;-0.37703;0.22029
    4;13;0.23579;0.32574;0.76885;0.68132E-01
    4;14;0.23536;0.32237;0.76262;0.69857E-01
    4;5;0.23513;0.25724;0.84904;0.51867E-01
    4;9;0.23955;0.12694;-0.43368;0.22753
    5;10;0.26563;0.32722;0.91645;0.28555E-01
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sed 's/ /\;/g' fichier | sort -t ';' +0n +1n
    col1;col2;var1;var2;h1;h2
    3;4;0.29344;0.23612;0.87633;0.40339E-01
    3;9;0.30473;0.12433;-0.37703;0.22029
    3;10;0.30274;0.46261;0.38001;0.12164
    3;11;0.29714;0.45030;0.67664;0.80811E-01
    4;5;0.23513;0.25724;0.84904;0.51867E-01
    4;9;0.23955;0.12694;-0.43368;0.22753
    4;13;0.23579;0.32574;0.76885;0.68132E-01
    4;14;0.23536;0.32237;0.76262;0.69857E-01
    5;10;0.26563;0.32722;0.91645;0.28555E-01
    10;11;0.46585;0.45304;0.26612;0.11821
    Et là, c'est trié par rapport au champ 1 puis au champ 2 numériquement !

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 589
    Points : 19 474
    Points
    19 474
    Par défaut


    voilà, voilà :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sort -t ' ' -k1n -k2n fichier
    col1 col2 var1 var2 h1 h2
    3 4 0.29344 0.23612 0.87633 0.40339E-01
    3 9 0.30473 0.12433 -0.37703 0.22029
    3 10 0.30274 0.46261 0.38001 0.12164
    3 11 0.29714 0.45030 0.67664 0.80811E-01
    4 5 0.23513 0.25724 0.84904 0.51867E-01
    4 9 0.23955 0.12694 -0.43368 0.22753
    4 13 0.23579 0.32574 0.76885 0.68132E-01
    4 14 0.23536 0.32237 0.76262 0.69857E-01
    5 10 0.26563 0.32722 0.91645 0.28555E-01
    10 11 0.46585 0.45304 0.26612 0.11821

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 271
    Points : 13 536
    Points
    13 536
    Par défaut
    J'avais commencé comme toi, sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $ sort -t ' ' -k1n -k2n fichier
    col1 col2 var1 var2 h1 h2
    3 4 0.29344 0.23612 0.87633 0.40339E-01
    3 9 0.30473 0.12433 -0.37703 0.22029
    4 5 0.23513 0.25724 0.84904 0.51867E-01
    4 9 0.23955 0.12694 -0.43368 0.22753
    3 10 0.30274 0.46261 0.38001 0.12164
    3 11 0.29714 0.45030 0.67664 0.80811E-01
    4 13 0.23579 0.32574 0.76885 0.68132E-01
    4 14 0.23536 0.32237 0.76262 0.69857E-01
    5 10 0.26563 0.32722 0.91645 0.28555E-01
    10 11 0.46585 0.45304 0.26612 0.11821
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $ sort --version
    sort (GNU coreutils) 8.26
    Copyright © 2016 Free Software Foundation, Inc.
    License GPLv3+*: GNU GPL version*3 ou ultérieure
    <http://gnu.org/licenses/gpl.html>
    C'est logiciel libre, vous êtes libre de le modifier et de le redistribuer.
    Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites
    autorisées par la loi applicable.
    Écrit par Mike Haertel et Paul Eggert.

  8. #8
    Membre à l'essai
    Homme Profil pro
    ingénieur d'étude
    Inscrit en
    Octobre 2014
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ingénieur d'étude
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2014
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Bonjour

    Merci pour vos réponses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    sort (GNU coreutils) 8.4
    Copyright © 2010 Free Software Foundation, Inc.
    License GPLv3+*: GNU GPL version 3 ou ultérieure
    <http://gnu.org/licenses/gpl.html>
    Ceci est logiciel libre, vous êtes libre de le modifier et de le redistribuer.
    Ce logiciel n est accompagne d'ABSOLUMENT AUCUNE GARANTIE, dans les limites
    autorisees par la loi applicable.
    Mon fichier est bien au format unix car il est créé par un script.

    Je n'avais pas pensé à changer le séparateur, bien joué

    Mais j'ai trouvé autre chose sur la toile qui me simplifie la vie donc je vous en fais part c'est l'option -g comme --general-numeric-sort et la ça marche sans problème
    J'espère que ça pourra en dépanner d'autres

    Merci en tout cas pour la réactivité
    A bientôt

Discussions similaires

  1. shell et awk
    Par mok6120 dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 31/07/2009, 16h18
  2. tri par shell
    Par flower_info dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 03/01/2009, 17h27
  3. Tri compliqué shell
    Par soledad_001 dans le forum Shell et commandes GNU
    Réponses: 20
    Dernier message: 30/10/2008, 14h27
  4. Réponses: 3
    Dernier message: 18/07/2007, 17h20
  5. Tableau en paramètre - Shell et Awk
    Par gc243 dans le forum Linux
    Réponses: 7
    Dernier message: 10/12/2003, 13h32

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