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 POSIX Discussion :

sed ou awk : supprimer tous les espaces suivis ou précèdés par un ; dans un fichier


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut sed ou awk : supprimer tous les espaces suivis ou précèdés par un ; dans un fichier
    Bonjour,
    j'aimerais supprimer d'un fichier .csv tous les espaces suivi d'un ; ou précéder par un ;
    (en utilisant ksh ou bash)
    cad en input un fichier .csv comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    azerty;ab ;package1               ; az;pa
    azerty;ab ;package2         ;az;pa
    et je veux en sortie que mon fichier soit comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    azerty;ab;package1;az;pa
    azerty;ab;package2;az;pa
    merci de votre aide.

  2. #2
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Si les espaces ne se trouvent QUE avant ou après un point virgule, autrement dit qu'on n'en trouve pas dans les noms contenus dans les champs, tu peux faire avec un simple tr -d ' ' < fichier_entrée > fichier_sortie, sinon avec un sed :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $ cat bar
    aze rty;ab ;package1               ; az;pa
    azerty;ab ;package2         ;az;pa
     
    $ sed 's/  *;/;/g;s/;  */;/g' bar 
    aze rty;ab;package1;az;pa
    azerty;ab;package2;az;pa
    Voilà le résultat avec "tr", mais notez la suppression de l'espace dans le nom "aze rty" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ tr -d ' ' <bar 
    azerty;ab;package1;az;pa
    azerty;ab;package2;az;pa
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  3. #3
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Une proposition avec sed

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/[  ]*;/;/g' -e 's/;[ ]*/;/g;' FICHIER.TXT

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 48
    Points : 37
    Points
    37
    Par défaut
    Merci beaucoup toutes les solutions proposées fonctionnent à merveille !

  5. #5
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par becket Voir le message
    Une proposition avec sed

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/[  ]*;/;/g' -e 's/;[ ]*/;/g;' FICHIER.TXT
    Pourquoi 2 transformations?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/[  ]*;[ ]*/;/g' FICHIER.TXT

  6. #6
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Salut,

    Citation Envoyé par jack-ft Voir le message
    Pourquoi 2 transformations?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed -e 's/[  ]*;[ ]*/;/g;' FICHIER.TXT
    Je réponds pour moi : Parce que des fois je suis c*n

    Non en fait, au départ j'avais essayé avec un OU (motif1\|motif2), pensant que ça marcherait sans problème et pour répondre à la demande de moctarim (et c'est là que la c*nnerie rentre en jeu) sans trop chercher à optimiser.
    Mais sous cette forme, quand il y avait un espace avant le point virgule ET un espace juste après, ben ça foirait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed 's/ \+;\|; \+/;/g' bar 
    aze rty;ab;package1; az;pa
    azerty;ab;package2;az;pa
    D'où l'utilisation d'une 2nd commande, parce que le OU n'est pas un ET

    Par contre, merci de nous/m'avoir ouvert les yeux
    $ man woman
    Il n'y a pas de page de manuel pour woman.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Je crois que la demande initiale a orienté la recherche:
    Citation Envoyé par moctarim Voir le message
    j'aimerais supprimer d'un fichier .csv tous les espaces suivi d'un ; ou précéder par un ;
    qu'on peut avantageusement remplacer par "remplacer les ; précédés ou suivis d'espaces par un ;"

  8. #8
    Expert éminent

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Points : 6 276
    Points
    6 276
    Par défaut
    Citation Envoyé par jack-ft Voir le message
    Je crois que la demande initiale a orienté la recherche:

    qu'on peut avantageusement remplacer par "remplacer les ; précédés ou suivis d'espaces par un ;"
    Toutafé Thierry
    $ man woman
    Il n'y a pas de page de manuel pour woman.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 02/05/2013, 15h19
  2. Réponses: 3
    Dernier message: 17/03/2010, 14h50
  3. Supprimer tous les espaces
    Par stounouslous dans le forum PostgreSQL
    Réponses: 5
    Dernier message: 26/05/2008, 15h22
  4. Supprimer tous les espaces vides à la fin des champs.
    Par godjojo dans le forum Requêtes
    Réponses: 8
    Dernier message: 15/12/2007, 21h04
  5. Supprimer TOUS les espaces d'une chaine
    Par tavekapaclike1er dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 24/12/2005, 15h19

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