Tri unique dans une chaine de caractères

JD -  
dubcek Messages postés 19021 Statut Contributeur -
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?
A voir également:

3 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
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
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
jipicy Messages postés 41342 Statut Modérateur 4 896
 
b=$(echo $a | tr ' ' '\n' | sort -u | tr '\n' ' ')
echo $b
1 2 3

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

merci
A+
0
dubcek Messages postés 19021 Statut Contributeur 5 638
 
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