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 :

awk et boucle for


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut awk et boucle for
    Bonjour a tous.

    J'ai un fichier texte avec des enregistrements ..1000 pour être précis.
    Dans chaque enregistrement j'ai un champ =866 avec des infos.
    La commande nawk ci-dessous formate le champ =866, le transforme en =952 et change des données à l’intérieur.
    Le awk marche bien, mais un des champs doit avoir une valeur incrémentée de 1 pour chaque enregistrement dans le fichier :

    Exemple du fichier (je colle pas tout car il est long)
    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
    =LDR  00795nas  2200193 i 4500
    =005  20100728125529.0
    =008  920520c1989\\\\-usmr\\\\\\\\\0\\\\\eng\\
    =022  0\$a1040-2446
    =041  0\$aeng
    =210  1\$aAcad Med
    =245  00$aAcademic Medicine / $cAssociation of American Medical Colleges.
    =260  \\$aPhiladelphia : $bAssociation American Medical Colleges, $c1989.
    =300  \\$c24 cm.
    =310  \\$aMensual
    =530  \\$aDisponible en versi{dbldotb}n electr{dbldotb}nica desde 2000.
    =650  \4$aMedicina.
    =780  00$aEs continuaci{dbldotb}n de. $t"Journal of Medical Education" $xISSN 0022-2577
    =856  \\$uhttp://ovidsp.ovid.com/ovidweb.cgi?T=JS&MODE=ovid&NEWS=n&PAGE=toc&D=ovft&AN=00001888-000000000-00000   $zAcceso al texto completo
    =866  \\$aBNCS-CH 1989 (1990)1991(1992)1993-96(1997)1998-2001(2002-2005)2006-2008.
    Le champs =866 devient ça une fois formaté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =952 \\$aBNCS-CH\\$bBNCS-CH\\$h1989\\$oBNCS-CH0000001\\$pBNCS-CH0000001\\$yJNL
    La commande est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nawk -F"[\$a ]" '{if ($0~/^=866/) {print "=952",$3"$a"$5$3"$b"$5"\\\\$h"$6"\\\\$o"$5"0000001\\\$p"$5"0000001\\\\$yJNL" } else {print $0}}' revistas1.txt >luis.txt
    Le problème c'est que je voudrais ces 2 champs là incrémentés de 1 pour chaque enregistrement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $o"$5"0000001\\\$p"$5"0000001
    Donc le $o et $p pour l'enregistrement suivant serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $o"$5"0000002\\\$p"$5"0000002
    ...
    dernier
    $o"$5"0000001000\\\$p"$5"0000001000

    J'ai pensé faire une boucle for dans le awk, mais je n'y arrive pas.
    Quelqu'un connait l'astuce?
    Ça serait quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $o"$5"000000"$i\\\$p"$5"000000"$i
    D'avance merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    Bonjour,

    une idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     printf '%s\n' {a..l} | awk 'increment = sprintf("%.6d\n",(++increment)) {print "increment = "increment}'

  3. #3
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Bonjour

    cette commande que vous proposez, je l’exécute après le nawk?
    La commande nawk je dois l’exécuter obligé car ça me formate mon fichier texte. A quel moment j’exécute votre commande?
    Je dois passer le nom de fichier quelque part ?

    D'avance merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    c'est seulement pour te montrer comment incrémenter une variable qui doit respecter un certain format.
    Il faut l'adapter, et le replacer dans ton code awk.

  5. #5
    Membre éclairé
    Inscrit en
    Avril 2006
    Messages
    702
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 702
    Par défaut
    Uffff
    je sais pas si je vais reussir a faire ça tout seul

    donc ça serait:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nawk -F"[\$a ]" '{if ($0~/^=866/) {print "=952",$3"$a"$5$3"$b"$5"\\\\$h"$6"\\\\| awk 'increment = sprintf("%.6d\n",(++increment)) {print "increment = "increment}'\\$yJNL" } else {print $0}}' revistas1.txt >luis.txt

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 713
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 713
    Par défaut
    nan, plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nawk -F"[\$a ]" '{if ($0~/^=866/) { increment = sprintf("%.6d",(++increment)); print "=952",$3"$a"$5$3"$b"$5"\\\\$h"$6"\\\\increment\\$yJNL" } else {print $0}}' revistas1.txt >lu    is.txt
    plus ou moins

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

Discussions similaires

  1. Boucle for dans un script cmd
    Par nicolas.ganache dans le forum Développement
    Réponses: 4
    Dernier message: 19/07/2004, 17h07
  2. Réponses: 3
    Dernier message: 06/07/2004, 11h21
  3. [Debutant] Batch et Boucle for
    Par ludovic.fernandez dans le forum Scripts/Batch
    Réponses: 8
    Dernier message: 06/05/2004, 20h21
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 23h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 12h54

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