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

Shell et commandes GNU Discussion :

AWK ou SED : Chercher doublon sur même ligne et supprimer la ligne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Tofdu31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 93
    Par défaut AWK ou SED : Chercher doublon sur même ligne et supprimer la ligne
    Bonjour à tous,

    Je cherche à supprimer des doublons sur même ligne dans un fichier csv.
    Je m'explique :
    Dans le fichier test.csv j'ai des lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    1;toto;arthur
    2;tata;tata
    3;tata;robert
    Je voudrais à l'aide de awk (qui est fait pour cela d'aprés les nombreuses pages web que je viens de lire), rechercher l'ensemble des lignes qui contiennent un doublon et si c'est le cas, supprimer la ligne.

    La demande est aussi possible avec la commande sed

    J'ai trouvé déja la commande pour sélectionner les lignes en double :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F ";" "!seen[$2]++" test.csv
    Info trouvé ici : https://unix.stackexchange.com/quest...n-without-sort

    Et enfin pour sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %sed% -rn "/(\b\w+\b).*\b\1\b/ p" test.csv
    Info trouvé ici : https://stackoverflow.com/questions/...uplicate-words

    Par contre comment supprimer les lignes maintenant ... Là, ché pas faire. En résumé mon /d je n'arrive pas à savoir ou je dois le placer. (si d'ailleurs c'est cela que l'on doit faire)

    Merci pour votre coup de main

    Au plaisir de vous lire

    Tof

  2. #2
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Les doublons c'est les lignes où les champs 2 et 3 sont identiques ?
    Si c'est ça, il te suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' '$2 != $3' fichier

  3. #3
    Membre confirmé Avatar de Tofdu31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 93
    Par défaut
    Merci pour ton aide,

    Par contre mon fichier a plusieurs lignes (50 environ)
    Et je ne n'arrive pas, malgré ta commande, supprimer le deuxième et troisième champs, si et uniquement si, ils sont les mêmes.


    Etant sous windows (pas le choix malheureusement...) voici ta commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F';' '$2 != $3' test.csv
    Comment faire du coup, non pas pour sélectionner puisque déja maitrisé, mais supprimer mes doublons. Sed serait pas la solution ?

    Merci pour votre aide.

    Tof

  4. #4
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    La commande que je t'ai donnée supprime les lignes dont les deuxième et troisième champs sont identiques.
    Avec l'exemple que tu as donné en introduction, voici ce que j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ awk -F';' '$2 != $3' test.csv
    1;toto;arthur
    3;tata;robert
    $
    Si ça n'est pas ce que tu demandes, alors j'ai mal compris.
    Si c'est ce que tu veux mais que ça ne marche pas sous windows, alors je ne sais pas.

  5. #5
    Membre confirmé Avatar de Tofdu31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 93
    Par défaut
    RE,

    Effectivement, sous windows, je suis obligé de remplacer les ' par les "

    Toutefois avec cette version :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F';' "$2 != $3" test.csv
    J'ai aucune erreur et dans mon fichier, rien n'a été effectué sur le fichier

    Et si j'ajoute mes guillemets autour du ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F";" "$2 != $3" test.csv
    j'ai à l'écran l'affichage de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1;toto;arthur
    3;tata;robert

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Ok, donc en gros, si j'ai bien compris, le problème était résolu depuis ton post #5, où tu as dit :
    Citation Envoyé par Tofdu31 Voir le message
    Et si j'ajoute mes guillemets autour du ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F";" "$2 != $3" test.csv
    j'ai à l'écran l'affichage de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1;toto;arthur
    3;tata;robert
    Mais il fallait simplement que tu rediriges la sortie vers un fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    %awk% -F";" "$2 != $3" test.csv > sortie.csv
    Si c'est bien ça, prends plutôt cette commande, qui fait exactement ce que tu demandes, ni plus ni moins (ce qui n'est pas le cas de la commande sed dans ton post #20).
    Et sache que sous linux, beaucoup de commandes n'écrivent pas directement dans un fichier mais sur la sortie standard : à charge à l'utilisateur de rediriger cette sortie vers un fichier, si il le souhaite.

  7. #7
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 287
    Par défaut
    Bonjour

    Etant sous windows (pas le choix malheureusement...)
    On a toujours le choix d'installer cygwin.

    J'ai aucune erreur et dans mon fichier, rien n'a été effectué sur le fichier
    La différence entre ' ' et " ", c'est que les " " laissent la place à l'interprétation. En l'occurrence, j'ai bien dans l'idée que $2 et $3 sont interprétés comme les paramètres positionnels de ton script bash, et non comme les champs de ta ligne dans awk.

  8. #8
    Membre confirmé Avatar de Tofdu31
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2016
    Messages
    93
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2016
    Messages : 93
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    . En l'occurrence, j'ai bien dans l'idée que $2 et $3 sont interprétés comme les paramètres positionnels de ton script bash, et non comme les champs de ta ligne dans awk.
    Je pense qu'il y a une mauvaise interprétation effectivement. Surtout quand j'integre ma commande dans mon fichier .bat, la commande n'est meme plus reconnu.


    En fait en résumé, pour mieux expliquer, j'ai une liste de noms DNS de serveur avec la correspondance IP. Le tout dans un csv.
    Toutefois, il y a pleins de ligne qui ont dans le champ 2 et champ 3 le nom DNS (2 fois donc)

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    champ1;champ2,champ3
    1;google.com;8.8.8.8
    2;google.com;google.com
    3;home.com;192.9.3.1
    As-tu une idée ?

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/11/2020, 22h54
  2. [XL-2010] Macro sommes cellules en doublons sur même ligne.
    Par Part30 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 28/01/2019, 16h12
  3. Expression régulière sur même ligne
    Par knebhi dans le forum Langage
    Réponses: 1
    Dernier message: 20/03/2009, 17h49
  4. combobox 2 selections consécutives sur même ligne impossible
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 04/11/2007, 14h46
  5. supprimer doublons sur 40000 lignes
    Par eillon dans le forum Excel
    Réponses: 28
    Dernier message: 25/10/2007, 13h33

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