Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 16/03/2010, 15h41   #1
Invité régulier
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 6
Points : 6
Par défaut [UNIX] Suppression doublons dans une variable

Bonjour

Je vous remonte une discussion sur le forum LINUX du 20/02 pour un problème de suppression de doublon dans une variable.

La discussion originale qui correspond pile-poil à mon problème est la suivante

Citation:
Envoyé par havany Voir le message
Bonjour, Je travaille actuellement sur un script shell assez long, et je suis un peu bloqué sur un problème. Je me retrouve avec une variable contenant une liste de mots dont certains sont en doubles.
Je voudrais tout simplement supprimer les doubles de cette variable. Concrètement :
j'ai ceci :
# echo $var
AA AA BB CC CC DD EE FF FF
et après traitement je voudrais avoir :

# echo $var AA BB CC DD EE FF

Là où ça se complique c'est que je voudrais éviter d'envoyer la variable dans un fichier, pour la traiter. De plus le nombre de mots dans la variable est totalement aléatoire, et l'ordre alphabétique n'est pas garanti non plus. (Je sais ça fait beaucoup de contraintes, mais si c'est impossible dites le moi et je me résignerai à faire avec un fichier)
Je vous remercie d'avance.
Sur le forum LINUX, 2 solutions qui fonctionnent toutes deux ont été proposées.

Citation:
Envoyé par N_BaH Voir le message
en bash :
Code :
1
2
3
4
var="AA AA BB CC CC DD EE FF FF"
var=$(tr ' ' '\n' <<<$var | sort -u | tr '\n' ' ')
echo $var
AA BB CC DD EE FF
...
?

Citation:
Envoyé par jmelyn Voir le message
Une autre solution?
Code :
var=$(echo $(echo -e ${var// /\\n} | sort -u))
Malheureusement, sous UNIX - SOLARIS 10, ca ne marche pas.

Que faudrait-il changer pour obtenir la même chose que sous LINUX et avoir ainsi un script portable (je travaille sur les deux environnements) ?

D'avance merci
david2109 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 15h54   #2
Membre éprouvé
 
Inscription : juillet 2006
Messages : 533
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 533
Points : 486
Points : 486
Sur le Solaris serveur 5.10 il suffit d'appliquer la derniere commande avec la variable var comme les traces montrent

Code :
1
2
3
4
5
6
7
8
9
10
11
[mytest@myHost tmp]>uname -a
SunOS myHost 5.10 Generic_127111-01 sun4u sparc SUNW,Sun-Fire-V490
[mytest@myHost tmp]>var="AA AA BB CC CC DD EE FF FF"
[mytest@myHost tmp]>var=$(tr ' ' '\n' <<<$var | sort -u | tr '\n' ' ')
[mytest@myHost tmp]>echo $var
AA AA BB CC CC DD EE FF FF
[mytest@myHost tmp]>var=$(echo $(echo -e ${var// /\\n} | sort -u))
[mytest@myHost tmp]>echo $var
AA BB CC DD EE FF
[mytest@myHost tmp]>
ttttnht est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2010, 16h27   #3
Invité régulier
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 6
Points : 6
Hélas, j'ai oublié de préciser que j'utilise KSH

Oui, la seconde solution fonctionne en BASH.

Mais, en KSH, pour la première solution, j'ai le message d'erreur

Code :
syntax error at line 1 : `<' unexpected
et la seconde solution ne renvoie rien (tjrs en shell KSH)

une idée pour que ca marche en KSH ?
david2109 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 05h05   #4
Membre Expert
 
Avatar de jlliagre
 
Inscription : juin 2007
Messages : 911
Détails du profil
Informations personnelles :
Localisation : France, Paris (Île de France)

Informations forums :
Inscription : juin 2007
Messages : 911
Points : 1 262
Points : 1 262
Code :
var=$(echo $var | tr ' ' '\n' | sort -u | tr '\n' ' ')
__________________
ɹǝsn *sıɹɐlos*
jlliagre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/03/2010, 08h22   #5
Invité régulier
 
Inscription : juin 2007
Messages : 13
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 13
Points : 6
Points : 6


super cette fois-ci ca fonctionne !

Tres instructif pour avoir une illustration des multiples différences d'un shell à l'autre et d'un environnement à un autre !

Encore merci !
david2109 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 20h14.


 
 
 
 
Partenaires

Hébergement Web