bonsoir à tous
je me suis écrit une fonction qui ne me satisfait pas trop
j'utilise des fichiers intermédiaires tmp avec sort et uniq
auriez-vous une meilleure solution (en bash) ?
remarque les xi sont des chaines quelconque pouvant comporter des espaces
function tri_chaine {     # recoit $1          x1;x2;x3;.....xn
                          # renvoie une chaine y1;y2;y3....yn
                          # ce sont les xi mais tous différents et triés alphabétiquement
                          # on doit pouvoir faire plus simple !!!! ?
        
    # écrire chaque terme de $1 dans tmp2.txt
    tmp2=/tmp/tmp2.txt
     
    rm ${tmp2}                   2>/dev/null
    (   IFS=";" list=($1)                               ;   \
        for i in ${!list[@]}                            ;   \
            do echo ${list[$i]}  >> ${tmp2}             ;   \
        done                                                \
    )
   
    # tri et suppression des doublons ,résultat dans tmp1.txt
    tmp1=/tmp/tmp1.txt 
    sort ${tmp2} | uniq          > ${tmp1}

    # reconstruire la chaine en lisant le fichier tmp1.txt
    chaine=""
    while read ligne
        do
           chaine="${chaine}${ligne};"
        done  < ${tmp1}
    
    # envoyer le résultat
    echo "$chaine"
}
Bonsoir,
autre_fonction(){ tr ';' '\n' <<<"$1" | sort -u | tr '\n' ';'; echo; }
et tout ça en une seule ligne !!!

il faut que je retienne 2 trucs
1- tranfomer les ; en \n ce qui permet d'utiliser sort
2- l' option -u de sort

merci piongouinux
Bonjour,
[HS]
pingouinux a écrit
Bonsoir,

autre_fonction(){ tr ';' '\n' <<<"$1" | sort -u | tr '\n' ';'; echo; }
Ça me rappelle une rubrique de "Hebdogiciel" où il était demandé au lecteur de créer une commande compliquée en une seule ligne
(nostalgie, quand tu nous tient ! )
[/HS]