Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/03/2019, à 20:14

ar barzh paour

[Résolu] tri alphabétique en bash

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"
}

Dernière modification par ar barzh paour (Le 02/03/2019, à 21:00)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#2 Le 01/03/2019, à 21:27

pingouinux

Re : [Résolu] tri alphabétique en bash

Bonsoir,

autre_fonction(){ tr ';' '\n' <<<"$1" | sort -u | tr '\n' ';'; echo; }

Hors ligne

#3 Le 02/03/2019, à 20:59

ar barzh paour

Re : [Résolu] tri alphabétique en bash

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

Dernière modification par ar barzh paour (Le 02/03/2019, à 21:03)


PC          : B760M DS3H DDR4,  12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 22.04, 22.04, 23.04
Portable1 : Intel(R) Core(TM)2 Duo CPU     T6570  @ 2.10GHz RAM 4GiB DDR2 667 MHz Ubuntu 23.04 ( en voyage )
Portable2 : T5750  @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )

Hors ligne

#4 Le 02/03/2019, à 21:14

Watael

Re : [Résolu] tri alphabétique en bash

\n ou \0 (NULL)


Connected \o/
Welcome to sHell. · eval is evil.

Hors ligne

#5 Le 02/03/2019, à 21:43

FrancisFDZ

Re : [Résolu] tri alphabétique en bash

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]


-- On peut avoir des raisons de se plaindre et n'avoir pas raison de se plaindre --
[Victor Hugo]

Hors ligne