• [^] # Re: difficile ....

    Posté par . En réponse au message Script awk : Afficher le nom du fichier en cours de traitement ?. Évalué à 4. Dernière modification le 16 juillet 2019 à 20:25.

    La deuxième méthode ...

    Pour info awk traite les fichiers ligne à ligne. Nous avons vu qu'on peut conditionner les traitements effectués sur des lignes en faisant des trucs du genre :

     awk '<test1> { action1} <test2> {action2} ... ' fichier_in
    

    On peut aussi effectuer certaines actions avant que la première ligne du fichier soit parsée et après que la dernière ligne du fichier ait éé parsée:

     awk 'BEGIN { action_avant_parse} {action2} END {action_apres_parse} ' fichier_in
    

    Exemple, nous allons afficher un texte avant de parser le fichier, afficher chaque ligne du fichier et afficher un texte après parsing :

    $ awk 'BEGIN {print "avant parsing"} {print } END { print "Apres parsing" }' /tmp/toto.txt
    avant parsing
    MO2PPC20;miaibv95;Running;AIX 6.1 6100年09月10日-1731;60;0.6;4;DefaultPool;shared;uncap;64
    MO2PPC20;miaibv161;Running;AIX 6.1 6100年09月10日-1731;60;1.2;4;DefaultPool;shared;uncap;128
    MO2PPC20;miaibv246;Running;AIX 6.1 6100年09月10日-1731;12;0.5;1;DefaultPool;shared;uncap;64
    MO2PPC20;mplaix0088;Running;AIX 7.1 7100年05月02日-1810;130;1.5;11;DefaultPool;shared;uncap;64
    MO2PPC20;mplaix0306;Running;AIX 7.1 7100年05月02日-1810;180;0.5;3;DefaultPool;shared;uncap;64
    MO2PPC20;mplaix0087;Running;AIX 7.1 7100年05月02日-1810;100;0.4;4;DefaultPool;shared;uncap;64
    MO2PPC20;miaibv182;Running;AIX 6.1 6100年09月10日-1731;5;0.5;1;DefaultPool;shared;uncap;64
    MO2PPC20;mo2vio20b;Running;VIOS 2.2.5.20;7;1.0;2;DefaultPool;shared;uncap;192
    MO2PPC20;mo2vio20a;Running;VIOS 2.2.5.20;7;1.0;2;DefaultPool;shared;uncap;192
    MO2PPC21;mo2vio21b;Running;VIOS 2.2.6.10;6;1.5;3;DefaultPool;shared;uncap;192
    MO2PPC21;mo2vio21a;Running;VIOS 2.2.6.10;6;1.5;3;DefaultPool;shared;uncap;192
    MO2PPC21;oncwasp4;Running;AIX 6.1 6100年09月10日-1731;15;0.6;2;DefaultPool;shared;uncap;128
    MO2PPC21;mplaix0122;Running;AIX 7.1 7100年05月02日-1810;175;2.3;5;DefaultPool;shared;uncap;64
    Apres parsing
    

    Dans la section BEGIN, certaines variables ne sont pas settées, FILENAME en fait partie (ici je n'affiche que dans la section begin, je n'affiche pas le contenu du fichier ni la fin) :

    $ awk 'BEGIN {print "Filename: " FILENAME}' /tmp/toto.txt
    Filename:
    

    Par contre dans la section END:

    $ awk 'END {print "Filename: " FILENAME}' /tmp/toto.txt
    Filename: /tmp/toto.txt
    

    De plus, awk permet de setter des variables en cours de parsing. On peut utiliser des tableaux:

    $ awk -F',|;' '
    BEGIN {i=0} 
    /MO2PPC/ {LPARS[i]=2ドル;RAM[i]=5ドル;CPU1[i]=6ドル;CPU2[i]=7ドル;i++} 
    END { 
     print "FILENAME/ " FILENAME; 
     for (j=0;j<i;j++) {
     print "LPARS: " LPARS[j]; 
     print "RAM: " RAM[j]; 
     print "CPU 1: " CPU1[j]; 
     print "CPU2: " CPU2[j]
     } 
    }' /tmp/toto.txt
    FILENAME/ /tmp/toto.txt
    LPARS: miaibv95
    RAM: 60
    CPU 1: 0.6
    CPU2: 4
    LPARS: miaibv161
    RAM: 60
    CPU 1: 1.2
    CPU2: 4
    LPARS: miaibv246
    RAM: 12
    CPU 1: 0.5
    CPU2: 1
    LPARS: mplaix0088
    RAM: 130
    CPU 1: 1.5
    CPU2: 11
    LPARS: mplaix0306
    RAM: 180
    CPU 1: 0.5
    CPU2: 3
    LPARS: mplaix0087
    RAM: 100
    CPU 1: 0.4
    CPU2: 4
    LPARS: miaibv182
    RAM: 5
    CPU 1: 0.5
    CPU2: 1
    LPARS: mo2vio20b
    RAM: 7
    CPU 1: 1.0
    CPU2: 2
    LPARS: mo2vio20a
    RAM: 7
    CPU 1: 1.0
    CPU2: 2
    LPARS: mo2vio21b
    RAM: 6
    CPU 1: 1.5
    CPU2: 3
    LPARS: mo2vio21a
    RAM: 6
    CPU 1: 1.5
    CPU2: 3
    LPARS: oncwasp4
    RAM: 15
    CPU 1: 0.6
    CPU2: 2
    LPARS: mplaix0122
    RAM: 175
    CPU 1: 2.3
    CPU2: 5

    LA section begin initialise l'index utilisé lors du parsing de chaque ligne du fichier. Cet index sera incrémenté à chaque fois qu'une ligne correspondra à la regexp. Puis à la fin, j'utilise une boucle for, qui aura comme compteur la variable j. Cette boucle va parcourir chaque tableau et afficher chaque valeur, jusqu'à ce que l'index j aura atteint la valeur de l'index i. Autrement dit c une façon de parcourir tout le tableau (mais il y en a d'autres).