Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch



  1. #1
    Antoane
    Responsable technique

    Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch


    ------

    Bonjour à tous,
    Je suis plus souvent du côté électronique du forum, donc désolé si je manque quelque chose

    Je réalise un batch, qui me sort un fichier chien.tmp de la forme :
    1 +048 20 35 72875 -004 31 09 15371 09 11 18 389 19 828
    2 +048 20 35 73782 -004 31 09 16051 09 11 18 389 19 618
    3 +048 20 35 74318 -004 31 09 16464 09 11 18 389 19 618 (avec plein de lignes).

    je veux regrouper un peu le tout, dans le but d'obtenir ça (out_3.txt) :
    1 48.34325799 -4.519209364 09 11 18.389 19.828
    2 48.34326051 -4.519211253 09 11 18.389 19.618
    3 48.34326199 -4.5192124 09 11 18.389 19.618 (avec autant de lignes )

    Pour cela, j'ai écrit :
    Code:
    gawk "{if($6>=0) print $1, $2+$3/60+($4+$5/100000)/3600, $6+$7/60+($8+$9/100000)/3600, $10, $11, $12+$13/1000, $14+$15/1000 ; if($6<0) print $1, $2+$3/60+($4+$5/100000)/3600, -(-$6+$7/60+($8+$9/100000)/3600), $10, $11, $12+$13/1000, $14+$15/1000}" OFMT="%.10g" chien.tmp >> out_3.txt
    Le problème, c'est que lorsque je lance mon fichier *.bat, qui contient toutes les lignes de commande à la fois, ça bug (le fichier chien.tmp est correct) :
    1 .10g .10g 09 11 .10g .10g
    2 .10g .10g 09 11 .10g .10g
    3 .10g .10g 09 11 .10g .10g ...

    alors que si je copie la ligne de commandes ci-dessous dans l'invite de commande Windows, tout marche pour le mieux... Une petite idée ?
    Merci d'avance !!!

    PS : Windows XP Pro, sur un ordinateur de l'entreprise.

    -----
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  2. #2
    invite4492c379

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Hello,

    un vieux souvenir ... dans les fichiers bat sous dos pour que ça fonctionne il faut doubler les $ car $n représente le nième paramètre que tu passes à ton batch. Donc au lieu de $2 (ok en ligne de commande) tu dois écrire $$2 (en batch) par exemple.

  3. #3
    Antoane
    Responsable technique

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Bonjour et merci pour ta réponse.
    Em remplaçant les deux lignes incriminées par :
    Code:
    gawk "{print $1, $2, £$3, $$2+$$3*60}" OFMT="%.10g" chien.tmp > out_3.txt
    ,
    avec un chien.tmp qui contient toujours la même chose,
    j'obtiens :
    1 +048 0
    2 +048 0
    3 +048 0...
    et avec :
    Code:
    gawk "{print $1, $2, $3, $$2+$$3*60}" OFMT="%.10g" chien.tmp > out_3.txt
    out_3.txt contient :
    1 +048 20 0
    2 +048 20 0
    3 +048 20 0...

    J'est peut-être pas compris tes explications ?
    Merci encore.
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  4. #4
    invite4492c379

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Il faut doubler tous les $ : $1 devient $$1, $2 devient $$2, etc ...

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    ben non, puisque les $ sont pour gawk.

    en fait, il faut les protéger avec des single quote (en tout cas en shell "normal"):
    Code:
    gawk '{if($6>=0) print $1, $2+$3/60+($4+$5/100000)/3600, $6+$7/60+($8+$9/100000)/3600, $10, $11, $12+$13/1000, $14+$15/1000 ; if($6<0) print $1, $2+$3/60+($4+$5/100000)/3600, -(-$6+$7/60+($8+$9/100000)/3600), $10, $11, $12+$13/1000, $14+$15/1000}' OFMT='%.10g' chien.tmp >> out_3.txt
    enfin, c'est une idée parce que moi et wintruc...

    en fait, après essai (sous linux), j'ai le même résultat en virant le % du format, c'est donc lui qui gicle, c'est (re)donc lui qu'il faut protéger (trouver la doc qui va bien)...

    ne viens pas à La Réunion avec ton soft, car tu auras des problèmes de (signe de) latitude...
    tiens, je t'ai mis le signe dans les minutes...
    Code:
    gawk '{la=$2>=0?60:-60; lo=$6>=0?60:-60; print $1,$2+($3+($4+$5/100000)/60)/la, $6+($7+($8+$9/100000)/60)/lo, $10, $11, $12+$13/1000, $14+$15/1000 }' OFMT='%.10g'
    Jusqu'ici tout va bien...

  7. #6
    polo974

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Au fait sous XP, il y a cmd.com et command32.exe ou un truc du genre...
    pas sûr du 32...
    Dernière modification par polo974 ; 14/02/2012 à 09h47.
    Jusqu'ici tout va bien...

  8. #7
    invite4492c379

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Aaaah ... je me disais aussi qu'il faillait protéger un des caractères et c'etait donc le % ...

  9. #8
    Antoane
    Responsable technique

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    en fait, il faut les protéger avec des single quote (en tout cas en shell "normal")
    Pas ici :
    Citation Envoyé par cmd.exe
    gawk: cmd. line:1: '{print
    gawk: cmd. line:1: ^ invalid char ''' in expression

    En fait, après essai (sous linux), j'ai le même résultat en virant le % du format, c'est donc lui qui gicle, c'est (re)donc lui qu'il faut protéger (trouver la doc qui va bien)...
    J'obtiens la même chose, mais d'après la doc : http://www.gnu.org/software/gawk/manual/gawk.html#OFMT, il ne semble pas qu'il ai plus protégé leur % que moi...
    http://www.gnu.org/software/gawk/man...k.html#Quoting J'ai donc essayé diverses combinaisons de ', de " et de /... j'ai rien trouvé de fonctionnel.


    ne viens pas à La Réunion avec ton soft, car tu auras des problèmes de (signe de) latitude...
    tiens, je t'ai mis le signe dans les minutes...
    C'est fait (4cas => 4 if), et même si c'est moins joli que ta méthode, c'est fonctionnel
    Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.

  10. #9
    polo974

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    bon, tu ouvres un fichier fmt.txt, tu y colles dedans :
    Code:
    { OTMT="%.10g"; la=$2>=0?60:-60; lo=$6>=0?60:-60; print $1,$2+($3+($4+$5/100000)/60)/la, $6+($7+($8+$9/100000)/60)/lo, $10, $11, $12+$13/1000, $14+$15/1000 }
    et tu lances:
    gawk -f fmt.txt
    comme ça le cmd ou autre ne bricole pas le programme awk...


    (comment, ça j'insiste avec mes ? : ...)
    Jusqu'ici tout va bien...

  11. #10
    Antoane
    Responsable technique

    Re : Gawk : fonctionne dans l'invite de cmd, mais pas dans un batch

    Merci beaucoup, et plus encore, car ça fonctionne.

    Evidemment, j'en demande toujours plus... tu ne vois pas comment je pourrais me passer du fichier fmt.txt, par hasard ?
    Si non, rien de grave : ça marche, c'est déjà génial.
    merci encore.

    "You know what ? I'm happy".

Discussions similaires

  1. Intrication quantique dans l'espace mais pas dans le temps ?
    Par invite85f45c9c dans le forum Physique
    Réponses: 7
    Dernier message: 27/11/2011, 14h11
  2. DVD reconnu dans le bios mais pas dans windows ???
    Par fano dans le forum Matériel - Hardware
    Réponses: 8
    Dernier message: 04/04/2008, 13h30
  3. reconnu dans windows mais pas dans le bios
    Par ABN84 dans le forum Matériel - Hardware
    Réponses: 4
    Dernier message: 27/12/2006, 18h41
  4. mes javascript:popupimage ne fonctionne pas sur mon site web mais fonctionne en local
    Par invite4ff499e4 dans le forum Internet - Réseau - Sécurité générale
    Réponses: 6
    Dernier message: 28/01/2006, 17h31