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 :

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
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
 
#!/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>'
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.


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 :

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
Bref, pouvoir ajouter une ligne indiquant le nom du fichier auquel appartiennent les informations.


J'ai cette commande :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
find . -maxdepth 1 -name '*.csv' -printf 'File : %f\n' -exec ./test4.sh {} \;
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
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
find . -maxdepth 1 -name '*.csv' -printf 'File : %f\n' -exec ./test4.sh {} \;
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
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
2
 
sys-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 :

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}"
Ce qui donne :


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 !