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 :

[SHELL] Modification de valeurs non numériques dans une colonne précise


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut [SHELL] Modification de valeurs non numériques dans une colonne précise
    Bonjour à tous,

    J’ai un petit problème sur lequel je bloque. Je souhaite pouvoir remplacer dans un fichier csv le champ d’une certaine colonne, par une valeur numérique fixe, lorsque celui-ci contient une valeur non numérique (càd avec au moins un caractère non compris entre [0-9]).

    Par exemple, si j’ai le fichier csv suivant :

    A0001;B32;00000G1;20101010
    A000201;B30;0000021;20101210
    A0001;B3421;0000022;20101210
    A0011103;B30;0000F22;20101210
    A0001;B30;0000023;20101210

    Je voudrais remplacer toutes les valeurs de la troisième colonne qui ne sont pas numériques par « 9999999999 » pour obtenir le fichier csv suivant :

    A0001;B32;9999999999;20101010
    A000201;B30;0000021;20101210
    A0001;B3421;0000022;20101210
    A0011103;B30;9999999999;20101210
    A0001;B30;0000023;20101210

    Cela est-il possible via awk ou sed ou tout autre outil et si oui quelle est alors la regexp ou l'instruction à utiliser ?

    Merci d’avance pour vos solutions

  2. #2
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    Ceci devrait fonctionner avec awk
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' '$3 ~ "[^0-9]" { $3="999999"}; {print}' fichier.csv

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci pour votre réponse. Cependant, quand j'essaye la commande proposée, j'ai l'erreur suivante :

    bash-3.00$ awk -F';' '$3 ~ "[^0-9]" { $3="999999"}; {print}' fichier.csv
    awk: syntax error near line 1
    awk: bailing out near line 1


    Est-ce que j'ai oublié un truc ?

  4. #4
    Membre averti Avatar de fransoo
    Inscrit en
    Novembre 2009
    Messages
    209
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 209
    Points : 300
    Points
    300
    Par défaut
    J'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ~/$ awk --version
    GNU Awk 3.1.6
    alors c'est peut-être un problème de version.
    Je vais voir s'il y a d'autres syntaxes car chez moi ça marche impec avec l'échantillon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ~/$ cat fichier.csv
    A0001;B32;00000G1;20101010
    A000201;B30;0000021;20101210
    A0001;B3421;0000022;20101210
    A0011103;B30;0000F22;20101210
    A0001;B30;0000023;20101210
    ~/$ awk -F';' '$3 ~ "[^0-9]" { $3="999999"}; {print}' fichier.csv
    A0001 B32 999999 20101010
    A000201;B30;0000021;20101210
    A0001;B3421;0000022;20101210
    A0011103 B30 999999 20101210
    A0001;B30;0000023;20101210
    ---- Edit ---------
    Cette syntaxe là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' '{ if ($3 ~ "[^0-9]") { $3="999999"}; {print}; }' fichier.csv

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup pour votre aide et vos propositions. Malheureusement avec ma version de awk, aucune ne marche. En revanche, j'ai pu trouvé une autre solution sur forum hardware. La voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' '{OFS=";"} ; $3~/[^0-9]/ {$3="99999"};{print $0}' fichier.csv

Discussions similaires

  1. Garder les valeurs non nulles dans une matrice
    Par mfontan dans le forum MATLAB
    Réponses: 4
    Dernier message: 03/04/2009, 13h42
  2. selection de valeur non nuls dans une plage
    Par bmeda72 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/08/2008, 16h05
  3. Copier valeur non vide dans une colonne
    Par Toad08 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/03/2008, 21h40
  4. nombre de valeurs non nulles dans une tables
    Par 080983 dans le forum SQL
    Réponses: 33
    Dernier message: 27/08/2007, 12h04
  5. Valeur non trouvé dans une requète SQL
    Par Jeankiki dans le forum Bases de données
    Réponses: 2
    Dernier message: 15/12/2006, 16h36

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