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 :

script bash /ligne commande : convertir écriture décimal /scientifique et tri


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut script bash /ligne commande : convertir écriture décimal /scientifique et tri
    Bonjour, je souhaite effectuer un tri selon ma colonne 2 mais le problème est que pour cette colonne une écriture décimal et scientifique. Ce qu'il me faudrait c'est convertir le numérique en décimal puis faire le tri
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    fichier départ : 
    "papa"	0.0313455862322512
    "mama"	0.027254231955422
    "toto"	6.49817309881614e-12
    "tata"	1.77415839402206e-11
    "titi"	4.64986256573682e-10
    Ci-dessous mon début de code je bloque car ma colonne 1 n'est pas numérique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    !/bin/bash
    while read col1 col2
    	do
    awk -F, '{print$1}{printf("%.13f\n",$2)}' 
    done < test
    Merci

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

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

    "tu" bloques parce que tu ne donnes rien à lire à awk !

    awk est un langage à part entière, la boucle shell ne sert à rien.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 725
    Points
    12 725
    Par défaut
    Une méthode qui fonctionne peut-être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/e\([0-9-][0-9]*\)$/ \1/;t;s/$/ 0/' fichier | sort -n -k3,3 -k2,2 | sed 's/ 0$//;s/ \([0-9-][0-9]*\)$/e\1/;/^$/d'
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    qu'est-ce que tu t'embêtes avec tous ces pipes ?
    Gawk va faire le boulot (mise en tableau des données, tri du tableau, et affichage); il faut simplement l'utiliser correctement.

    EDIT: mais je suis pris d'un doute quant à la capacité de Gawk à trier des indices de tableau qui seraient des décimaux...
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre éprouvé Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    346
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 346
    Points : 977
    Points
    977
    Par défaut
    Sauf erreur, c'est beaucoup plus simple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LC_ALL=C sort -k2g fichier

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    tellement simple !
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut
    Merci.

    Voiçi mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    cat test2 |sed 's/"//g' |awk 'BEGIN {FS="\t"}{printf($1"\t""%.13f\n",$2)}'| sort -nrk2 
     
    Résultat: 
    toto	0.0000000000065
    titi	0.0000000004650
    tata	0.0000000000177
    papa	0.0313455862323
    mama	0.0272542319554
    Il s'avère que mon tri n'est pas correst, tata est après tata?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    laisse tomber le script. La commande donnée par balkany est parfaite.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 142
    Points : 57
    Points
    57
    Par défaut
    Merci pour vous réponse que je n'avais pas vu avant de poster.
    @disedorgue, pourraits- tu m'expliquer ce que fait cette variable je n'ai toujours compris, oui même en allant sur google!

  10. #10
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 277
    Points : 12 725
    Points
    12 725
    Par défaut
    Perso, c'est à cause de cette variable que j'ai fait le sed à coté, car j'avais testé le -g de sort au départ...

    Balkani

    Et pourquoi je devrais être choisi pour expliquer la variable ?
    Je ne l'ai pas utilisée que je sache

    *** man locale ***
    Cordialement.

Discussions similaires

  1. Scripts BASH &amp; commande Find
    Par GoodWear dans le forum Administration système
    Réponses: 2
    Dernier message: 09/10/2009, 09h25
  2. Script en ligne de commande
    Par choas dans le forum Langage
    Réponses: 2
    Dernier message: 23/03/2006, 10h31
  3. Utilisation d'un script en ligne de commande
    Par Thylia dans le forum Langage
    Réponses: 5
    Dernier message: 23/01/2006, 16h28
  4. [SQL*Plus] Lancer un script en ligne de commandes
    Par Jibees dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 04/07/2005, 17h05
  5. [SQL*Plus] Lancer un script en ligne de commandes
    Par Jibees dans le forum Oracle
    Réponses: 6
    Dernier message: 04/07/2005, 15h31

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