Tri unique dans une chaine de caractères

JD -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je cherche à récuperer sous AIX les champs uniques dans une chaîne de caractères. Par exemple:

a="1 2 1 2 3 1"
resultat="1 2 3"

Avez-vous une idée?

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    [tmpfs]$ echo "$a"
    1 2 1 2 3 1
    
    [tmpfs]$ b=$(echo -e "${a// /\n}" | sort -u | tr '\n' ' ')
    
    [tmpfs]$ echo "$b"
    1 2 3
    
    [tmpfs]$

    ;-))
    1
  2. JD
     
    Merci Jipicy,

    L'idée de remplacer les espaces par des \n est excellente. ca marche fort bien en Linux mais pas sous AIX :-[

    b=$(echo -e "${a// /\n}" | sort -u | tr '\n' ' ')
    ksh: "${a// /\n}": bad substitution
    1
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      b=$(echo $a | tr ' ' '\n' | sort -u | tr '\n' ' ')
      echo $b
      1 2 3

      ;-))
      0
    2. JD
       
      mais c'est bien sure... les idées les plus simples sont souvent les meilleures

      merci
      A+
      0
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    hello
    autre méthode pour conserver l'ordre des champs
    $ echo 3 1 3 1 2 1 2 3 1 | awk '{for(n=1;n<=NF;n++)if(!x[$n])printf x[$n]=$n OFS ;print""}' 
    3 1 2 
    $
    0