Bonjour,
En tant que petit jeune dans le monde du script bash/awk, linux, [ insérer ce que vous voulez], vous m'avez déjà bien aidé sur certains sujets, de ce fait, je sollicite une nouvelle fois votre aide !
Toujours entrain de m'occuper de ma CGI en bash/html, j'ai réussi à répondre à toutes les demandes et à résoudre la majorité des problèmes rencontrés. Cependant, il en reste un " truc " avec lequel je me débat et impossible de trouver une solution.
Ma CGI me permet de sélectionner via un menu déroulant le nom d'un FRAME. Une fois sélectionné, je peux voir sa consommation en RAM/CPU. Je travaille avec 276 csv, mon script passe donc dans tous ces fichiers, ne garde que les lignes contenant le nom du FRAME, ne garde que les colonnes nécessaires et affiche les informations comme cela :
Voici le code de ma page CGI sur laquelle s'affiche le résultat et contenant le script awk :
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 FRAME : MIAIBYA00 ------------------ LPARS : miavioya01-not-work RAM : CPU 1 : CPU 2 : LPARS : miaibc05 RAM : 40 CPU 1 : null CPU 2 : 2 LPARS : miaiba05 RAM : 18 CPU 1 : null CPU 2 : 2 LPARS : miaibf03 RAM : 30 CPU 1 : null CPU 2 : 3 LPARS : miaiba14 RAM : 19 CPU 1 : null CPU 2 : 2 LPARS : miaibe04 RAM : 14 CPU 1 : null CPU 2 : 6 LPARS : miaiba12 RAM : 17 CPU 1 : null CPU 2 : 2 LPARS : miaibc07 RAM : 25 CPU 1 : null CPU 2 : 2 LPARS : miaibd05 RAM : 19 CPU 1 : null CPU 2 : 1
Avec " read a ", " test=$( echo $a | cut -d'=' -f2) " et " echo $test ", je lis ma query string, le cut pour ne garder que ce dont j'ai besoin puis j'affiche le nom du FRAME.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 #!/bin/bash echo "Content-type: text/html" echo "" echo ' <html> <head> <meta http-equiv="Content-Type" content="test/html"; charset=UTF-8"> <title> CLF MONITORING </title> <h1> FRAME monitoring <font size=3> <a href="Index.sh">[ Index ]</a> </font> </h1> <hr size="4" color="blue"> <style> body{ background-color: #eff1f0; } </style> </head> <body>' read a test=$( echo $a | cut -d'=' -f2) echo $test echo '<PRE>' echo "FRAME : $test " echo "------------------" echo "" cat /var/www/cgi-bin/LPAR_MAP/*.csv | grep $test | awk -F',|;' '{print $1","$2","$5","$6","$7}' | awk -F',|;' '{ print "LPARS : " $2 print "RAM : " $3 print "CPU 1 : " $4 print "CPU 2 : " $5 print "" }' echo '</PRE>' echo '</body> </html>'
Comme je l'ai dit plus haut, j'ai 276 fichiers CSV à analyser qui sont de ce style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 MO1PPC03,mplaix0144,Running,AIX 7.1 7100-05-02-1810,60,0.5,3,DefaultPool,shared,uncap,128 MO1PPC03,mplaix0158,Running,AIX 7.1 7100-05-02-1810,21,0.4,4,DefaultPool,shared,uncap,64 MO1PPC03,mplaix0156,Running,AIX 7.1 7100-05-02-1810,45,0.6,6,DefaultPool,shared,uncap,64 MO1PPC03,mplaix0154,Running,Unknown,50,0.4,8,DefaultPool,shared,uncap,64 MO1PPC03,mplaix0150,Running,AIX 7.1 7100-05-02-1810,119,1.2,21,DefaultPool,shared,uncap,64 MO1PPC03,mplaix0117,Running,AIX 7.1 7100-05-02-1810,90,3,12,DefaultPool,shared,uncap,128 MO1PPC03,mplaix0142,Running,AIX 7.1 7100-05-02-1810,90,0.5,5,DefaultPool,shared,uncap,128 MO1PPC03,mplaix0141,Running,AIX 7.1 7100-05-02-1810,60,1,2,DefaultPool,shared,uncap,128 MO1PPC03,mplaix0033,Running,AIX 6.1 6100-09-10-1731,105,15,17,MPLSPPIWS01P,shared,uncap,128 MO1PPC03,mplaix0111,Running,AIX 7.1 7100-05-02-1810,79,1,5,MPLSPPA2P1P,shared,uncap,128
Avec ce que j'ai pour le moment, j'arrive à afficher tous les frames mais je n'arrive pas à savoir à quel fichier ils appartiennent. L'idée serait de faire quelques choses du style :
Bref, pouvoir ajouter une ligne indiquant le nom du fichier auquel appartiennent les informations.
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57 FRAME : MIAIBYA00 ------------------ File : File1.csv LPARS : miavioya01-not-work RAM : CPU 1 : CPU 2 : LPARS : miaibc05 RAM : 40 CPU 1 : null CPU 2 : 2 LPARS : miaiba05 RAM : 18 CPU 1 : null CPU 2 : 2 File : File2.csv LPARS : miaibf03 RAM : 30 CPU 1 : null CPU 2 : 3 LPARS : miaiba14 RAM : 19 CPU 1 : null CPU 2 : 2 LPARS : miaibe04 RAM : 14 CPU 1 : null CPU 2 : 6 LPARS : miaiba12 RAM : 17 CPU 1 : null CPU 2 : 2 File : File3.csv LPARS : miaibc07 RAM : 25 CPU 1 : null CPU 2 : 2 LPARS : miaibd05 RAM : 19 CPU 1 : null CPU 2 : 1
J'ai cette commande :
Et...Génial, avec un fichier aaaa.csv et bbbb.csv, ça fonctionne d'enfer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 find . -maxdepth 1 -name '*.csv' -printf 'File : %f\n' -exec ./test4.sh {} \;
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47 File : aaaa.csv LPARS : sg2as088 RAM : 10 CPU 1 : 0.4 CPU 2 : 2 LPARS : sg2as059 RAM : 12 CPU 1 : 0.5 CPU 2 : 2 LPARS : sg2as139 RAM : 10 CPU 1 : 0.5 CPU 2 : 3 LPARS : miaibya08 RAM : 62 CPU 1 : 2 CPU 2 : 4 File : bbbb.csv LPARS : sg2as088 RAM : 10 CPU 1 : 0.4 CPU 2 : 2 LPARS : sg2as059 RAM : 12 CPU 1 : 0.5 CPU 2 : 2 LPARS : sg2as139 RAM : 10 CPU 1 : 0.5 CPU 2 : 3 LPARS : miaibya08 RAM : 62 CPU 1 : 2 CPU 2 : 4 LPARS : FRCFQAM00MIC2XM RAM : 6 CPU 1 : 0.4 CPU 2 : 3
Donc super, juste avec cette commande, j'arrive à faire ce dont j'ai besoin. Le problème c'est que c'est une commande que je tape dans mon terminal. Ce qu'il faudrait, c'est l'intégrer à ma CGI. Je reprends donc le code de ma page ( celui que j'ai donné un peu plus haut ), et je réfléchis... L'avantage avec mon premier code, c'est que je peux faire un grep et ne garder que les lignes qui m’intéressent. L'avantage avec cette ligne de commande, c'est que j'arrive à afficher les informations en-dessous du fichier auxquelles elles appartiennent.
Et là, je bloque. Comment faire les deux en même temps ?
Ma ligne de commande :
Affiche les noms des fichiers de l'intégralité des CSV puis exécute mon script. Je suppose donc que c'est au niveau de mon script que je dois modifier quelque chose :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 find . -maxdepth 1 -name '*.csv' -printf 'File : %f\n' -exec ./test4.sh {} \;
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 cat /var/www/cgi-bin/LPAR_MAP/*.csv | grep $a | awk -F',|;' '{print $1","$2","$5","$6","$7}' | awk -F',|;' '{ print "LPARS : " $2 print "RAM : " $3 print "CPU 1 : " $4 print "CPU 2 : " $5 print "" }'
Mais mon script fouille déjà ma liste de fichier csv... N'y aurait-il pas un moyen pour faire tout ça en même temps ?
Donc ça, c'était le problème pour afficher les noms de fichiers.
--------------
Maintenant, deuxième partie du problème :
Les noms de fichiers sont de ce style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2sys-map-20180913.csv
Là dedans, la seule chose qui m'intéresse, c'est la partie date que j'arrive à extraire en tapant dans un terminal :
Ce qui donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 echo sys-map-20180913.csv | cut -d'-' -f3 | cut -d'.' -f1 ou echo sys-map-20180913.csv | grep -oP "\d{8}"
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
220180913
Cette fois-ci, sans même chercher à intégrer cette demande à mon script, sauriez-vous comment ajouter le " cut -d'-' 'f3 | cut -d'.' -f1 " ou le " grep -oP " \d{8}" " à cette commande :
Code : Sélectionner tout - Visualiser dans une fenêtre à part find . -maxdepth 1 -name '*.csv' -printf 'File : %f\n' -exec ./test4.sh {} \;
Voilà... Je bloque là dessus. Désolé pour le post un peu long ! Je suppose que je fais beaucoup de mauvaise chose, notamment au niveau des cut qui se suivent et des deux awk, mais je ne vois pas comment faire autrement pour le moment. N'hésitez pas à me corriger donc !
Pourriez-vous m'éclairer de vos lanternes ? Merci d'avance !
Merci d'avance !![]()
Partager