Forum Programmation.shell Tri d'une liste en shell (KSH)

Posté par  .
Étiquettes : aucune
0
25
jan.
2007
Bonjour à tous,
j'ai un probleme que j'arrive pas à resoudre. j'ai une liste de chaines de caracteres ( a b c d e) , cette liste correspond à une deuxieme liste d'entiers (5 2 1 3 4) ie a --5 , b --2 , c--1,...., je veux ecrire une fonction qui renvoie la liste de chaines ordonnés ie (c b d e a).
Si quelqu'un a une idée , comme je ne maitrise pas bien le shell, j'avoue que c'est délicat .
Amicalement
  • # Hash

    Posté par  . Évalué à 1.

    Salut

    je n ai pas essayer mais ca peut peut-etre t aider - C est aussi en rapport avec le thread que tu as poste avant sur le hash en shell

    http://open.itworld.com/5040/nls_unix_arrays060817/page_1.ht(...)

    @++

    Cyril
  • # Tu veux qu'on fasse tes devoirs a ta place ?

    Posté par  . Évalué à 3.

    C'est juste une question .... J'ai l'impression que c'est le moment.
  • # un tri ?

    Posté par  . Évalué à 1.

    Tel que je comprends le probème, tu as une liste de variables qui ont comme valeur des entiers, et tu voudrais pouvoir trier ces variables en fonction de ces entiers, c'est ça ?

    Si tu peux éviter le tout ksh, tu pourrais peut-être utiliser sort ? genre echo "${a} a\n${b} b" | sort -n

    Je ne sais pas ce que tu entends vraiment par renvoie de la liste de chaines ordonnées.

    Sinon, il faut coder un algo de tri en ksh (bubble sort, quicksort ... ça dépend de toi)
    • [^] # Re: un tri ?

      Posté par  . Évalué à 1.

      merci pour vos reponses,
      mais je suis contraint de coder en shell (KSH) ce script vu les normes du client.
      une question y'a moyen de parcourir un tableau mais via ses indices.
      comme une boucle for simple quoi ,genre
      for (i =0; i<10; i++) {
      tab[i]=$i
      }
      c'est simple mais compliquer à le faire en shell , vu qu'on ne peut parcourir que les valeurs memes du tableau
      • [^] # Re: un tri ?

        Posté par  . Évalué à 1.

        Donc, c' est KSH en utilisant aucune commande externe ?
        (pas de awk, sort, sed, tr, cut et autre ?). Gloups !!

        C' est quoi comme KSH ? KSH93 ?

        Parce que seul ksh93 gère les tableaux associatifs me semble-t-il, et ce serait plutôt ce qu'il te faudrait.

        Essaye ksh93 arrays sur google, les premiers liens sont très utiles.
  • # Tu peux essayer ça dans un script

    Posté par  . Évalué à 1.

    #!/bin/bash
    tri_tab() {
    liste1=($1)
    liste2=($2)
    i=0
    liste_res=(`while [ $i -lt ${#liste1[*]} ]
    do
    echo ${liste2[$i]} ${liste1[$i]}
    let i+=1
    done | sort | awk '{print $2}'`)
    echo "${liste_res[*]}"
    }

    tableau1=(a b c d e)
    tableau2=(5 2 1 3 4)

    tri_tab "${tableau1[*]}" "${tableau2[*]}"

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.