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 :

SED - Supprimer 3 chiffres sur une colonne


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut SED - Supprimer 3 chiffres sur une colonne
    Bonjour,

    J'ai un fichier texte avec des valeurs délimitées par des points-virgule :

    20130625;22;6150444466406;0810006033;AAA;10
    20130625;7;6330444441247;0238554590;PROSODIE;10
    20130625;113;0060444455226;0243954035;AAA;5
    20130625;3;0060444425231;0689793164;BBB;5
    20130625;33;0110444448015;0609750061;PROSODIE;14
    
    [...]
    Sur chaque ligne je voudrai supprimer les 3 premiers chiffres de la 3eme colonne. exemple le 615 :

    20130625;22;6150444466406;0810006033;AAA;10
    Je pensais utiliser la commande sed avec des regex, mais je ne maîtrise pas vraiment.

    J'ai testé sed -e 's/;[∗];;[∗];;[∗];$/\3/' sans résultats.

    Merci de m'aider

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bonjour,

    Un truc comme ceci devrait fonctionner (pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/;[0-9]\{,3\}/;/2'

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration

    Informations forums :
    Inscription : Décembre 2012
    Messages : 43
    Par défaut
    j'ai plutot pensé 'awk'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    cat liste.txt | awk 'BEGIN { FS=";"; OFS=";" } {$3=substr($3,4,length($3));print $0}' > toto.txt
    fichier de départ : liste.txt
    fichier d'arrivée : toto.txt

  4. #4
    Invité
    Invité(e)
    Par défaut
    Pas besoin du cat et du lenght. Il suffit donc d'avoir ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'BEGIN { FS=";"; OFS=";" } {$3=substr($3,4);print $0}' liste.txt > toto.txt
    Ps: je confirme que la commande sed de disedorgue fonctionne

  5. #5
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut
    Bonjour,

    Merci à tous. J'ai juste testé la commande de disedorgue et elle fonctionne parfaitement.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed 's/;[0-9]\{,3\}/;/2'
    Par contre pouvez-vous m'expliquer la commande étape par étape, car j'ai du mal à comprendre comment ça fonctionne?

  6. #6
    Invité
    Invité(e)
    Par défaut
    On remplace la partie commençant par ";" suivi de 3 chiffre max.
    [0-9] : chiffres de 0 à 9
    \{, 3\} : ce qu'il y a avant (donc les chiffres) doit être présent 0 à 3 fois

    On la remplace par un ";"
    Et on ne fait cette opération que sur la 2 ème occurrence trouvée (le 2 à la fin).

  7. #7
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 30
    Par défaut
    Du coup j'ai essayé d'adapter le code pour supprimer la 5eme colonne (AAA, PROSODIE etc.)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    line=`echo $line | sed 's/;[a-zA-Z]*/;/1'`
    Mais ça ne marche pas...

    Le 1 c'est bien pour dire que c'est la 1ere occurrence trouvée qui contient du [a-zA-Z]?

    J'ai essayé en remplaçant le 1 par du 5 au cas ou tu parlais des colonnes, mais pas de résultat non plus...

Discussions similaires

  1. Réponses: 2
    Dernier message: 26/05/2014, 13h48
  2. [XL-2003] Supprimer une règle sur une colonne
    Par audrey1912 dans le forum Excel
    Réponses: 3
    Dernier message: 23/11/2012, 14h16
  3. Mettre tous les chiffres en indices sur une colonne
    Par ledisciple dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/08/2011, 15h29
  4. Trigger sur une colonne ?
    Par hpalpha dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 14h16
  5. Check sur une colonne de table "en cours"
    Par in dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 02/07/2003, 09h47

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