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é.
[^] # Re: difficile ....
Posté par totof2000 . 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 :
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 :
Je veux ajouter le filename :
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:
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:
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é.