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 :

[AWK] Substitution de chaine


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut [AWK] Substitution de chaine
    Bonjour,

    Je souhaiterai substituer une valeur prédéfinie d'un fichier de la facon suivante :

    Fichier test.txt :

    A;-99999;X;X;X
    B;-99999;X;X;X
    C;-99999;X;X;X
    D;-99999;X;X;X
    E;-99999;X;X;X

    J'utilise le script shell suivant :

    ID="3834690"

    awk -v PARAM=$ID '
    {
    gsub(-99999,PARAM, $0);
    PARAM ++;
    print $0;
    } ' test.txt > ./result.txt


    Ca ne marche pas ca me donne le resultat suivant :

    A;3.83469e+06;X;X;X
    B;3.83469e+06;X;X;X
    C;3.83469e+06;X;X;X
    D;3.83469e+06;X;X;X
    E;3.83469e+06;X;X;X

    J'aurai voulu avoir :

    A;3834690;X;X;X
    B;3834691;X;X;X
    C;3834692;X;X;X
    D;3834693;X;X;X
    E;3834694;X;X;X

    En fait il me convertit ma variable selon le CONVFMT qui est "%.6g"
    et j'arrive pas a m'en affranchir

    Auriez-vous une idée ?

    D'avance merci de votre aide

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    oui c'est simple il faut juste mettre -9999 entre "" pour que cela soit pris pour une chaine de car.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    ID="3834690"
     
    awk -v PARAM=$ID '
    {
    gsub("-99999",PARAM, $0);
    PARAM ++;
    print $0;
    } ' test.txt > ./result.txt

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    J'ai malheureusement déjà testé cette solution et ça ne
    fonctionne pas plus. En fait, mon identifiant ($ID) est
    automatiquement reformaté avec un format incluant
    un exposant et c'est pas du tout ce que je veux. J'arrive
    pas a garder l'écriture initiale (3834690)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 27
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
     cat test.txt
    A;-99999;X;X;X
    B;-99999;X;X;X
    C;-99999;X;X;X
    D;-99999;X;X;X
     
     cat ma.sh  
    ID="3834690"
     
    awk -v PARAM=$ID '
    {
    gsub(-99999,PARAM, $0);
    PARAM ++;
    print $0;
    } ' test.txt > ./result.txt
     
     ./ma.sh 
     
     cat result.txt 
    A;3834690;X;X;X
    B;3834691;X;X;X
    C;3834692;X;X;X
    D;3834693;X;X;X
    E;3834694;X;X;X
    oui c'est marrant car ,en fait meme ta premiere version marche chez .
    avec bash et GNU Awk 3.1.5

  5. #5
    Membre à l'essai
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Par défaut
    Je suis sous ksh et bizarrement ça fonctionne
    pas non plus en sh arffff

    Personne ne connait une autre façon de faire
    tout aussi rapide que AWK ?

  6. #6
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    [QUOTE=MarLOne]Je suis sous ksh et bizarrement ça fonctionne
    pas non plus en sh arffff
    QUOTE]


    Peut-être comme ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    awk -v PARAM=$ID  '
    BEGIN {
    	FS=";"
    	OFS=";"
    }
    {
    	$2=PARAM
    	PARAM++
    	print $0
    } ' toto.txt

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

Discussions similaires

  1. Substitution de chaines
    Par oliviernouhi dans le forum Langage
    Réponses: 2
    Dernier message: 10/07/2012, 16h14
  2. Substitution de chaine
    Par Rochester dans le forum Langage
    Réponses: 4
    Dernier message: 08/08/2011, 16h05
  3. Réponses: 2
    Dernier message: 13/11/2010, 10h30
  4. FOR /F, FINDSTR, variable temporaire, et substitution de chaine
    Par abdelhamidem dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 09/03/2009, 11h35
  5. Substitution de chaine de caractères
    Par bdkiller dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 13/09/2005, 14h01

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