IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

supprimer des doublons dans une variable


Sujet :

Linux

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut supprimer des doublons dans une variable
    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.

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    en bash :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ...
    ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 6
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    ...

    Super merci ! C'est exactement ce que je voulais...

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 36
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    C'est vrai que ce bout de code marche bien !
    Mais, pour ma culture, serait-il possible d'avoir une petite explication sur le pourquoi du comment ça fonctionne ?

    notamment le rôle des 2 commandes tr ?
    Et quel est cet opérateur <<< ?

    Apparemment ca marche en ksh aussi.

    Cdt

  5. #5
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    • tr : permet de remplacer un caractère par un autre dans l'entrée fournie
    • < < < Mot : Le mot est étendu et fourni à la commande sur son entrée standard.


    Ce qui revient à ceci en fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tr ' ' '\n' "AA AA BB CC CC DD EE FF FF" #remplacement des espace par retour ligne
    sort - u # trier le texte reçu sur l'entrée standard
    tr '\n' ' ' #remplacement du retour ligne par un espace
    Si je dis des co***rie N_BaH me corrigera

  6. #6
    Membre éclairé Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Points : 823
    Points
    823
    Par défaut
    Une autre solution?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var=$(echo $(echo -e ${var// /\\n} | sort -u))

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 584
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 584
    Points : 19 461
    Points
    19 461
    Par défaut
    Citation Envoyé par Winnt
    Ce qui reviens à ceci en fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo ""AA AA BB CC CC DD EE FF FF" | tr ' ' '\n'
    #...
    tr traite directement/"transitivement" les fichiers, mais pas les chaînes.

    Citation Envoyé par jmelyn
    Une autre solution ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var="$(echo $(sort -u <<< "${var// /$'\n'}"))"
    Ah, oui ! cela fonctionne parce qu'on omet une paire de guillemets...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Suppression des doublons dans une variable de type tableau
    Par damsmut dans le forum Général VBA
    Réponses: 2
    Dernier message: 23/07/2019, 10h36
  2. Supprimer des doublons dans une table
    Par arngrimur dans le forum Langage SQL
    Réponses: 9
    Dernier message: 26/10/2011, 13h59
  3. Supprimer des doublons dans une table
    Par jonoz dans le forum SQL
    Réponses: 2
    Dernier message: 12/03/2010, 17h48
  4. Requête pour supprimer des doublons dans une table
    Par nomade333 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2008, 12h48
  5. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo