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 :

Substituer un seul caractère en AWK


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    DIE
    DIE est déconnecté
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2005
    Messages
    101
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 101
    Par défaut Substituer un seul caractère en AWK
    Bonjour,
    Je suis toujours sur mon script de variabilisation.
    Maintenant j'essai de substituer UN seul caractère dans une chaine de caractère.

    Par exemple, soit la ligne de mon fichier :
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS77A)

    ce qui m'interesse c'est de substituer le 7 en gras par la variable £JEU,
    j'ai essayé avec un sub mais le problème c'est qu'il me substitue le premier
    7 et non le second (c'est toujours le dernier chiffre qui doit etre variabilisé)


    J'ai réussi à faire en sorte que mon AWK fonctionne en matchant les lignes comme si dessous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    match($0,"PLAN[(].*[0-9][ABSP][)]")     {
                              JEU=substr($0,RSTART+(RLENGTH-3),1)
                              JEU_match=substr($0,RSTART+5,RLENGTH-7)
                              JEU_debut=substr($0,RSTART+5,RLENGTH-8)
                              JEU_chaine=JEU_debut"£JEU"
                              sub(JEU_match,JEU_chaine)
    }
    RESULTAT :
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS7£JEUA)

    ça marche bien comme ci dessus (découpant les chaines de caractère avant et après le 7 et en recollant le tout) mais je trouve que cela fait très usine à gaz
    comment substituer un seul caractère déterminé dans une chaine ?

    Merci

  2. #2
    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
    Que penses-tu de ceci

    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
     
    echo "liste.txt"
    cat liste.txt
     
    echo -e "\nTraitement"
    awk '
    {
    	if (match($0,"^RUN PROGRAM.* PLAN.*[0-9]+")) {
    		LastDigit=substr($0,RLENGTH,1)
    		print "Record "NR" : position et valeur du dernier chiffre présent après la chaîne PLAN : "RLENGTH", "LastDigit | "cat 1>&2"
    		print substr($0,RSTART,RLENGTH-1)"£JEU"substr($0,RLENGTH+1)
    	}
    } ' liste.txt > result.txt
     
    echo -e "Fin Traitement\n"
    echo "result.txt"
    cat result.txt

    liste.txt
    RUN PROGRAM(SRLOSABA) PLAN(SRLOSA)
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS12345A)
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS77A)
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS77A88)

    Traitement
    Record 2 : position et valeur du dernier chiffre présent après la chaîne PLAN : 37, 5
    Record 3 : position et valeur du dernier chiffre présent après la chaîne PLAN : 34, 7
    Record 4 : position et valeur du dernier chiffre présent après la chaîne PLAN : 37, 8
    Fin Traitement

    result.txt
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS1234£JEUA)
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS7£JEUA)
    RUN PROGRAM(SRLOSABA) PLAN(SRLOS77A8£JEU)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 88
    Par défaut
    Bonjour,

    C'est une commande tres intéressant.. merci
    Par contre qu'est ce que fait le "cat" dans ta commande awk ?

    Merci

  4. #4
    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
    Dans l'exemple ci-dessous :

    print $0 :
    - écris $0 dans le fichier déclaré par la variable $outfile

    print "blah blah" | "cat 1>&2"
    - écris "blah bla" dans la sortie standard (1), elle-même redirigée vers la stderr - sortie standard d'erreur (2) - en l'occurence l'écran.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    awk '
    {
        print $0
        print "blah blah" | "cat 1>&2"
    } ' $infile > $outfile


    Voir http://marcg.developpez.com/ksh/

    .../...
    Redirection,Substitution,enchaînement Les redirections sont le détournement des 3 descripteurs de fichiers standards à savoir :
    3.1. Les redirections en sortie
    3.2. Les redirections en entrée
    .../...
    3.3. La redirection des erreurs
    3.4. Les enchaînements (pipe et tee)
    .../...
    Les redirections sont le détournement des 3 descripteurs de fichiers standards à savoir :
    l'entrée standard (noté 0) : le clavier
    la sortie standard (noté 1) : la console courante
    la sortie des erreurs (noté 2) : la console courante
    .../...

Discussions similaires

  1. [XL-2002] Pourquoi le titre de la fenêtre FileDialog n'affiche qu'un seul caractère?
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/06/2012, 02h49
  2. Réponses: 3
    Dernier message: 18/11/2011, 20h23
  3. prendre un seul caractère d'une chaîne
    Par philouxy dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 07/01/2010, 21h13
  4. [MySQL] Je veux récupérer la valeur des champs de ma base et je n'ai qu'1 seul caractère
    Par yiuche dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 03/08/2006, 18h05
  5. [MySQL] substituer chaine de caractère
    Par calitom dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 08/03/2006, 18h15

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