Tri unique dans une chaine de caractères

Fermé
JD - 8 juil. 2010 à 18:42
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 - 12 juil. 2010 à 11:00
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
8 juil. 2010 à 18:53
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
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 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
9 juil. 2010 à 17:55
b=$(echo $a | tr ' ' '\n' | sort -u | tr '\n' ' ')
echo $b
1 2 3

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

merci
A+
0
dubcek Messages postés 18755 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 14 novembre 2024 5 621
Modifié par dubcek le 12/07/2010 à 11:01
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