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 :

ordonner lignes de valeurs


Sujet :

Shell et commandes GNU

  1. #1
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut ordonner lignes de valeurs
    Bonjour,
    j'ai un fichier constitué de lignes de la forme :
    3 5 7 9 11 96 17 98 23 99 30 100

    je voudrais pour chaque ligne, ordonner les valeurs.

    Si vous avez des idées?
    merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Salut,

    tu as été voir du côté de la commande sort?


  3. #3
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    Merci pour ta réponse
    mais la commande sort tri les lignes entre elles. Ce que je veux faire c'est dans une meme ligne, faire le tri des valeurs
    merci

  4. #4
    Membre chevronné Avatar de Leeloo_Multiboot
    Profil pro
    Administrateur Unix/Linux
    Inscrit en
    Avril 2008
    Messages
    417
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur Unix/Linux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2008
    Messages : 417
    Par défaut
    Coucou,

    Par tri tu entends quoi exactement?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cat ton_fichier | tr -s ' ' '\n' | sort -n | tr -s '\n' ' '
    J'avoue, ça fait un peu pouilleux mais ça fonctionne

  5. #5
    Membre éclairé

    Inscrit en
    Août 2007
    Messages
    308
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 308
    Billets dans le blog
    1
    Par défaut
    J'étais pas trés claire peut-être dans mon explication

    voilà ce que je veux faire:

    fichier en entrée (2 lignes)

    1 4 5 9 8
    7 3 4 6


    Je veux obtenir les deux lignes mais chacune triée
    1 4 5 8 9
    3 4 6 7


    merci

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 133
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 133
    Par défaut
    C'est la même chose ligne par ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read
    do
      echo ${REPLY} | tr -s ' ' '\n' | sort -n | tr -s '\n' ' '
    done < ton_fichier
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    La solution d'Alt_24 ne fonctionne pas correctement puisqu'elle ne donne qu'une seule et grande ligne en sortie. Il faut noter que la commande read utilise la variable $REPLY lorsqu'aucune variable n'est fournie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    while read line
    do
        echo $line | tr...
    done < ton_fichier
    Ici j'utilise explicitement la variable $line dans echo $line | tr..., donc $REPLY n'est pas utilisée.

    J'ai essayé en utilisant la commande awk, mais je ne suis pas arrivé à quelque chose de parfaitement élégant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    awk '
    {
        split($0, line)
        asort(line)
        for (i = 1; i <= NF; i++)
        {
            $i = line[i]
        }
        print
    }' ton_fichier
    J'aurais aimé pouvoir accéder aux champs comme dans un tableau standard, FIELDS par exemple. Et dans ce cas, ce serait plus simple et plus rapide.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk '{asort(FIELDS); print}' ton_fichier
    Je vais voir si on peut utiliser simplement Bash...

  8. #8
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bon, sans utiliser gawk, je n'arrive pas à mieux que ce que proposé par al1_24 (en corrigeant le mini-bug).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #!/bin/bash
    rm -f fichier_out
    while read line
    do
        echo $line | tr -s ' ' '\n' | sort -n | tr '\n' ' ' >> fichier_out
        echo "" >> fichier_out
    done < fichier_in

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/04/2007, 12h33
  2. Requete permettant de renvoyer sur une ligne plusieur valeurs
    Par shaun_the_sheep dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 13/02/2007, 15h09
  3. Réponses: 3
    Dernier message: 29/11/2006, 12h49
  4. INSERT multi-lignes avec valeurs connues
    Par herve91 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 09/11/2006, 23h13
  5. Ajout n lignes selon valeur...
    Par nicburger dans le forum Access
    Réponses: 1
    Dernier message: 26/10/2005, 19h49

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