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 :

Remplacer un ou plusieurs espaces par un point virgule


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Remplacer un ou plusieurs espaces par un point virgule
    Bonjour à tous,

    j'ai un fichier avec une ligne qui contient des champs séparés par 1 ou plusieurs espaces.
    J'aimerais effectuer 2 choses :
    1) Relancer le ou les espaces par un point virgule qui servira donc de séparateur de champs
    je sais que la commande awk peut faire ça mais là j'ai des champs qui sont potentiellement séparés par plusieurs espaces
    2) supprimer la lettre T dans chaque champs qui la contient
    160.42T devient 160.42
    426T devient 426 etc...

    Voici le contenu de mon fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alux001  160.42T   100%    426T              30%                2.2 to 1        3.1 to 1         125.39T  2.49K      10.51T  0.00    0.00         135.91T
    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    La seule justification raisonnable à la présence de tant d'espaces dans le fichier est d'avoir un fichier organisé en largeur de colonne fixe. As-tu vérifier cela ? Si c'est le cas, awk a une fonctionnalité de largeur de colonne fixe. Cela t'évitera des modifications barbares et impropres, le cas échéant.

    Et puis le conseil est toujours le même. D'où vient ce fichier ? Il vaut mieux demander à la source de donner un fichier propre.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour.
    Le fichier vient d'un système propriétaire, d'une appliance. A mon avis ça va être compliqué de faire un fichier plus "propre" étant donné le peu de commandes qui existent dans cette appliance ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 382
    Points
    19 382
    Par défaut
    il y a de la doc sur cette appli et le format du fichier qui en sort ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Je vais fouiller. Je vous tiens au jus.

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour,
    c'est bon, j'ai trouvé l'option qui permet d'avoir un fichier exploitable.
    J'ai maintenant des , mais je les ai modifiées en ; avec le sed :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed 's/,/;/g' nom_du_fichier -i
    ça fonctionne.

    Par contre quand j'i utilisé sed de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    sed 's/,/;/g' fichier_source fichier_cible
    je n'ai pas retrouvé mes fichiers avec les point virgules... Il n'y a pas eu de modification dans mon cible...

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Pour un translate de caractère, 'y' est mieux que 's' ( + la redirection sur le fichier_cible pour que celui-ci soit modifié) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 'y/,/;/' fichier_source >fichier_cible
    Cordialement.

  8. #8
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Merci disedorgue. Ha oui c'est la redirection qu'il manquait 😉

  9. #9
    Membre habitué
    Homme Profil pro
    sans
    Inscrit en
    Juillet 2019
    Messages
    127
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : sans

    Informations forums :
    Inscription : Juillet 2019
    Messages : 127
    Points : 126
    Points
    126
    Par défaut
    Citation Envoyé par sam01 Voir le message
    1) Relancer le ou les espaces par un point virgule qui servira donc de séparateur de champs
    je sais que la commande awk peut faire ça mais là j'ai des champs qui sont potentiellement séparés par plusieurs espaces
    2) supprimer la lettre T dans chaque champs qui la contient
    160.42T devient 160.42
    426T devient 426 etc...
    Bonsoir,
    ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ echo "alux001  160.42T   100%    426T              30%                2.2 to 1        3.1 to 1         125.39T  2.49K      10.51T  0.00    0.00         135.91T"> tata/faitquoi ; sed 's/T//g' < <(cat tata/faitquoi | sed 's/[ ]\+/ /g') 
    alux001 160.42 100% 426 30% 2.2 to 1 3.1 to 1 125.39 2.49K 10.51 0.00 0.00 135.91
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ echo "alux001  160.42T   100%    426T              30%                2.2 to 1        3.1 to 1         125.39T  2.49K      10.51T  0.00    0.00         135.91T" |  sed -e 's/T//g' -e 's/[ ]\+/#/g'
     alux001#160.42#100%#426#30%#2.2#to#1#3.1#to#1#125.39#2.49K#10.51#0.00#0.00#135.91

Discussions similaires

  1. [Batch] Remplacer plusieurs espaces par une seule virgule
    Par SimFaridas dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 07/12/2018, 15h57
  2. [Sed]Remplacer une série d'espaces par un délimiteur
    Par progfou dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 24/01/2011, 15h09
  3. [String] remplacer plusieurs espaces par un seul
    Par scraly dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 01/12/2010, 15h25
  4. Remplacement de plusieurs espaces par une seul
    Par Bayard dans le forum Général Python
    Réponses: 2
    Dernier message: 23/11/2008, 18h10
  5. Remplacer plusieurs espace par un seul
    Par rjcab dans le forum VBA Access
    Réponses: 14
    Dernier message: 04/07/2008, 12h28

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