• [^] # 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 à 19:45.

    C'est presque ça.

    Il y a d'ailleurs plusieurs façons de faire.

    Je vais partir de la commande de base (je suppose qu'il y a eu une erreur de copier/coller)

    Soit mon fichier d'entrée toto.txt qui contient :

    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
    

    Si je pars de la premiere commande (corrigée, je suppose qu'il y a erreur de copier/coller a l'origine), j'ai ça :

    cat /tmp/toto.txt | grep MO2PPC | awk -F',|;' '{
    print "LPARS :" 2ドル
    print "RAM : " 5ドル
    print "CPU 1 : " 6ドル
    print "CPU 2 : " 7ドル
    }'
    LPARS :miaibv95
    RAM : 60
    CPU 1 : 0.6
    CPU 2 : 4
    LPARS :miaibv161
    RAM : 60
    CPU 1 : 1.2
    CPU 2 : 4
    LPARS :miaibv246
    RAM : 12
    CPU 1 : 0.5
    CPU 2 : 1
    LPARS :mplaix0088
    RAM : 130
    CPU 1 : 1.5
    CPU 2 : 11
    LPARS :mplaix0306
    RAM : 180
    CPU 1 : 0.5
    CPU 2 : 3
    LPARS :mplaix0087
    RAM : 100
    CPU 1 : 0.4
    CPU 2 : 4
    LPARS :miaibv182
    RAM : 5
    CPU 1 : 0.5
    CPU 2 : 1
    LPARS :mo2vio20b
    RAM : 7
    CPU 1 : 1.0
    CPU 2 : 2
    LPARS :mo2vio20a
    RAM : 7
    CPU 1 : 1.0
    CPU 2 : 2
    LPARS :mo2vio21b
    RAM : 6
    CPU 1 : 1.5
    CPU 2 : 3
    LPARS :mo2vio21a
    RAM : 6
    CPU 1 : 1.5
    CPU 2 : 3
     ... 
    

    Je veux ajouter le filename :

    cat /tmp/toto.txt | grep MO2PPC | awk -F',|;' '{
    print "FILENAME: " FILENAME
    print "LPARS :" 2ドル
    print "RAM : " 5ドル
    print "CPU 1 : " 6ドル
    print "CPU 2 : " 7ドル
    }'
    FILENAME: -
    LPARS :miaibv95
    RAM : 60
    CPU 1 : 0.6
    CPU 2 : 4
    FILENAME: -
    LPARS :miaibv161
    RAM : 60
    CPU 1 : 1.2
    CPU 2 : 4
    FILENAME: -
    LPARS :miaibv246
    RAM : 12
    CPU 1 : 0.5
    CPU 2 : 1
    FILENAME: -
    LPARS :mplaix0088
    RAM : 130
    CPU 1 : 1.5
    CPU 2 : 11
     ... 
    

    On voit deux problèmes: Le premier, c'est qu'à chaque ligne, le nom de fichier apparait. Le second, c'est qu'on a un '-' (correspond à stdin) parce que l'on a fait un cat | grep | awk.

    Pour corriger le premier problème, il suffit de n'afficher la ligne FILENAME que lorsqu'on traite la première ligne du fichier:

    cat /tmp/toto.txt | grep MO2PPC | awk -F',|;' 'NR==1 { print "FILENAME: " FILENAME }
    {
    print "LPARS :" 2ドル
    print "RAM : " 5ドル
    print "CPU 1 : " 6ドル
    print "CPU 2 : " 7ドル
    }'
    LPARS :miaibv95
    RAM : 60
    CPU 1 : 0.6
    CPU 2 : 4
    LPARS :miaibv161
    RAM : 60
    CPU 1 : 1.2
    CPU 2 : 4
    LPARS :miaibv246
    RAM : 12
    CPU 1 : 0.5
    CPU 2 : 1
    LPARS :mplaix0088
    RAM : 130
    CPU 1 : 1.5
    CPU 2 : 11
    LPARS :mplaix0306
    RAM : 180
    CPU 1 : 0.5
    CPU 2 : 3
    LPARS :mplaix0087
    RAM : 100
    CPU 1 : 0.4
    CPU 2 : 4
    LPARS :miaibv182
    RAM : 5
    CPU 1 : 0.5
    CPU 2 : 1
    LPARS :mo2vio20b
    RAM : 7
    CPU 1 : 1.0
    CPU 2 : 2
    LPARS :mo2vio20a
    RAM : 7
    CPU 1 : 1.0
    CPU 2 : 2
    LPARS :mo2vio21b
    RAM : 6
    CPU 1 : 1.5
    CPU 2 : 3
    LPARS :mo2vio21a
    

    Pour explication, NR correspond a l'enregistrement courant (par défaut la ligne en cours de traitement). On n'affiche le nom du fichier que si la ligne en cours de traitement est la première ligne.

    Ensuite, on veut afficher le nom du fichier. Pour ça il faut virer le cat | grep | awk, tout en gardant la regexp:

    awk -F',|;' 'NR==1 { print "FILENAME: " FILENAME }
    /MO2PPC/ {
    print "LPARS :" 2ドル
    print "RAM : " 5ドル
    print "CPU 1 : " 6ドル
    print "CPU 2 : " 7ドル
    }' /tmp/toto.txt
    FILENAME: /tmp/toto.txt
    LPARS :miaibv95
    RAM : 60
    CPU 1 : 0.6
    CPU 2 : 4
    LPARS :miaibv161
    RAM : 60
    CPU 1 : 1.2
    CPU 2 : 4
    LPARS :miaibv246
    RAM : 12
    CPU 1 : 0.5
    CPU 2 : 1
    LPARS :mplaix0088
    RAM : 130
    CPU 1 : 1.5
    CPU 2 : 11
    LPARS :mplaix0306
    RAM : 180
    CPU 1 : 0.5
    CPU 2 : 3
    LPARS :mplaix0087
    RAM : 100
    CPU 1 : 0.4
    CPU 2 : 4
    

    Pour le traitement, j'ai ajouté un test sur une regexp et du coup on a plus besoin du grep. Il suffit maintenant d'intégrer ça dans une boucle telle que tu l'as indiqué et c'est gagné.