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 :

[shell] Remplacement de valeur dans un fichier plat


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut [shell] Remplacement de valeur dans un fichier plat
    Bonjour,

    je souhaite remplacer des valeurs automatiquement et en masse dans un ficheir plat. Les champ de ce fichier sont séparés par des ';'.
    Imaginons que je veuille remplacer le 10ème champ par "00000,00" quand il vaut initialement "00000,01"; j'a donc voulu utiliser cette ligne de commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F ';' '{gsub("00000,01","00000,00",$10); print $0}' $filenameIn > $filenameOut
    Cela fonctionne à peu près, si ce n'est que pour les lignes où a lieu le remplacement de valeur, les séparateurs de champs sont remplacés par des espaces.

    Qui plus est, quand j'aurai résolu ce souci, je souhaiterai pouvoir variabiliser la valeur à remplacer, la valeur de remplacement et le numéro de colonne (fixé ici à 10 arbitrairement... Vaste programme...

    Merci pour votre aide

  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,
    Tu peux fournir des valeurs à des variables awk en entrée via l'option '-v'.

    Pour que ton séparateur de champs en sortie soit par exemple le ';', il suffit que tu initialises la variable awk OFS, se qui donnerait en exemple complet (pas testé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F ';' -vXX="00000,00" 'BEGIN{OFS=";"}{gsub("00000,01",XX,$10); print $0}' $filenameIn > $filenameOut

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Super, ça marche très bien (il faut juste mettre un espace entre le -v et le nom de la variable). Aussi bien le séparateur de champs que la variabilisation des valeur du remplacement.
    Il ne me manque que la possibilité de dynamiser le numéro de champ où effectuer l'opération

  4. #4
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    Citation Envoyé par zoidberg Voir le message
    Il ne me manque que la possibilité de dynamiser le numéro de champ où effectuer l'opération
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -vTOTO="10" '{print $TOTO}'

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

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

    Si on sait que c'est le 10ème champ, pas besoin de gsub. (ou une valeur variabilisé comme l'a bien montré BufferBob)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' 'BEGIN{OFS=";"} ($10=="00000,01"){$10="00000,00";} 1' "$filenameIn" > "$filenameOut"

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Mars 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 19
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -vTOTO="10" '{print $TOTO}'
    Oui, effectivement, cela fonctionne bien.



    Citation Envoyé par Flodelarab Voir le message
    Bonjour

    Si on sait que c'est le 10ème champ, pas besoin de gsub. (ou une valeur variabilisé comme l'a bien montré BufferBob)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk -F';' 'BEGIN{OFS=";"} ($10=="00000,01"){$10="00000,00";} 1' "$filenameIn" > "$filenameOut"
    Le fait est que je veux dynamiser le champ à remplacer, cette solution n'est donc pas inéressante

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

Discussions similaires

  1. script shell pour remplacer un mot dans un fichier
    Par MSM_007 dans le forum Linux
    Réponses: 2
    Dernier message: 17/06/2010, 20h37
  2. Valeurs pour variables dans un fichier plat
    Par lylau dans le forum Développement de jobs
    Réponses: 4
    Dernier message: 11/01/2010, 16h17
  3. [XSLT] Remplacer une valeur dans un fichier XML
    Par NicoV dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/11/2009, 16h21
  4. Remplacement dans un fichier plat
    Par melmouj dans le forum Langage
    Réponses: 6
    Dernier message: 23/03/2007, 16h49
  5. remplacer un caractere dans un fichier
    Par ickis dans le forum C
    Réponses: 11
    Dernier message: 13/10/2003, 09h29

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