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 :

Problème avec l'apostrophe dans la commande awk avec print


Sujet :

Linux

  1. #1
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut Problème avec l'apostrophe dans la commande awk avec print
    bonjour,

    Je rencontre un petit problème dans un script avec la commande awk
    à cause de l'apostrophe qui n'est pas interprété dans la commande print

    il y a pas d'erreur lors de l'execution mais dans le resultat que je voudrais obtenir j'ai besoin de conserver par exemple le terme type 'SBT_TAPE'

    et non type SBT_TAPE


    voici un morceau du script

    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
    26
    27
     
     
    cat /home/${userLinux}/${fichier} | awk '
     
    BEGIN {
     
    print "su - ${USERLINUX} -c \"";
    print "rman target sys/mdp@${INSTANCE} catalog x/y@base_catalogue auxiliary sys/mdp@${INSTANCECLONE}<<!"
    print "run {";
    print "allocate auxiliary channel dev1 device type 'SBT_TAPE' parms=\"ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin/${REP_USER}/tdpo.opt)\";";
    }
    NR == 1 {instance = $0}
    NR > 1 {
    print "set newname for datafile " $1 " to " $2
    }
    END{
    CHEMIN="CHEMIN"
    print "duplicate target database to " instance;
    print "logfile";
    print "GROUP 1  ('"CHEMIN"/redo01.log')  SIZE 50M,";
    print "GROUP 2  ('"CHEMIN"/redo02.log')  SIZE 50M,";
    print "GROUP 3  ('"CHEMIN"/redo03.log')  SIZE 50M;";
    print "}";
    print "quit;";
    print "!\""
    }
    '
    sauriez vous comment on peut rendre obligatoire l'interpretation de l'apostrophe dans une commande awk ?

    Merci
    c@simir

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    ecrire le script awk dans un fichier et l'executer avec awk -f mon_fichier_awk
    y a peut etre mieux , mais cette solution fonctionne
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  3. #3
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    bonjour,
    Si tu dois intégrer ton script awk dans un script shell, tu peux écrire le script awk dans le même fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #! /bin/bash
     
    echo "lancement du script awk :"
    awk -f - <<-FIN_AWK
    BEGIN{
            print "bonjour 'toto'"
    }
    FIN_AWK
    echo "fin du script awk...."

  4. #4
    Membre habitué Avatar de tony montana
    Profil pro
    Inscrit en
    Février 2004
    Messages
    114
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 114
    Points : 136
    Points
    136
    Par défaut
    salut,
    as tu essayé en mettant un backslash devant ?
    donc \' à la place de '

  5. #5
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Citation Envoyé par tony montana
    salut,
    as tu essayé en mettant un backslash devant ?
    donc \' à la place de '
    Nous te renvoyons la question

  6. #6
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    je pense choisir la solution de MarcG qui fonctionne bien pour ce que je veux
    faire
    Pour la solution de narmataru il me faudrait un complement d'information
    c'est à dire que dans ton exemple tu genères dynamiquement un fichier awk mais où
    passes tu le fichier en paramètre ?

    Merci
    c@simir

  7. #7
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    oui j'ai essayé \'
    c@simir

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    le fichier n'est pas passé en paramètre, en faite la commande << TAG_DE_FIN
    indique de prendre ce qui suis comme une redirection d'entrée jusqu'a la sequence "TAG_DE_FIN", le "fichier" d'entrée est donc saisie dans le script, le shell n'interprète donc pas cette partie qui est considérée comme une saisie clavier
    Marc
    Slackware for ever ......
    BASH - KSH ( http://marcg.developpez.com/ksh/ )

  9. #9
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    oui
    le script awk est inclus dans le script shell comme si tu avais fichier dans un seul
    l'expression 'commande <<-LABEL' renvoie les lignes du fichier courant sur l'entrée standard de 'commande' jusqu'au label 'LABEL'
    voilou

  10. #10
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    je me suis mal fait comprendre je voulais parlé du fichier que je passe en tant que paramètre et non pas le fichier programme en lui même

    exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     
    awk -f programme_awk  fichier t=1 etc ....
    Dans votre cas vous générez le fameux fichier "programme_awk" dynamiquement mais comment passez vous le paramètre fichier ou bien t=1 ...
    c@simir

  11. #11
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Les paramètres de la commande awk se passent normalement. Il faut juste mettre '-f -' pour spécifier que le code sera lu sur l'entrée standard. Souvent les commandes qui prennent un fichier source en paramètre admettent le nom de fichier '-' pour définir l'entrée standard.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #! /bin/bash
     
    echo "test"
    awk -f - -v t=1 toto.txt <<-FIN_AWK
    	BEGIN{ print "bonjour"}
    	{
    		print \$2 t
    	}
    FIN_AWK
    echo "fin test"

  12. #12
    Membre habitué Avatar de vbcasimir
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    455
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mars 2003
    Messages : 455
    Points : 168
    Points
    168
    Par défaut
    effectivement ça allourdie un peu la synthaxe d'un point vue code mais ça m'interesse ...

    bon bien merci pour les réponses .

    j'aurais une autre question sur le caractère "\" mais je vais ouvrir une autre question ..

    Merci bcp

    c@simir

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

Discussions similaires

  1. problème avec l'apostrophe dans une requête
    Par mika0102 dans le forum VBA Access
    Réponses: 7
    Dernier message: 09/03/2019, 16h51
  2. Problème avec les apostrophes dans le sql en VBA
    Par cyrilboulan dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 14/03/2017, 10h11
  3. Réponses: 3
    Dernier message: 10/09/2009, 11h08
  4. Réponses: 3
    Dernier message: 17/04/2008, 10h04
  5. Réponses: 4
    Dernier message: 31/01/2008, 18h22

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