Probleme avc la commande awk

Résolu/Fermé
frip - 14 mai 2009 à 14:26
 frip - 18 mai 2009 à 17:34
Bonjour a tous ,
j'ai un script qui doit recuperer des valeurs dans un fichier qui est le resultat d'une tablespace,le pb est que j'arrive a recuperer les valeurs recherchées mais j'ai un pb avec la comparaison des valeurs le but a la fin c'est qu'il m'alerte si cette valeur est superieur a 95.
voici mon script
#!/bin/bash
cat fic | grep ^ANAPRESU >fichier
cat fic | grep ^ANAPTST >> fichier
cat fic | grep ^INDANAP >>fichier
cat fic | grep ^RBS >> fichier
cat fic | grep ^SYSTEM >> fichier
cat fic | grep ^TEMP >> fichier
awk 'Begin { print"test la valeur du tablespace";FS=""}
while $7 > 30
{ print " warning la table "$1" est pleine a "$7"% "}
End' fichier
il me donne cette erreur
awk: cmd. ligne:1: while $7 > 30
awk: cmd. ligne:1: ^ syntax error
comme quoi j'ai un pb avec ma syntaxe de test ,qui peut m'aider a voir l'erreur car jarrive pas a la retrouver

9 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
14 mai 2009 à 14:40
Salut,
awk 'Begin { print"test la valeur du tablespace";FS=""}
{ if ($7 > 30)  print " warning la table "$1" est pleine a "$7"% "} 
;-))
3
frip93 Messages postés 2 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 mai 2009
14 mai 2009 à 17:27
merci jipicy
ça marche té un gentil homme et comme tu l'a su le dire toi meme le savoir est bon que s'il est partagé
gracias
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
14 mai 2009 à 17:40
De nada ;-))
0
frip93 Messages postés 2 Date d'inscription jeudi 14 mai 2009 Statut Membre Dernière intervention 15 mai 2009
15 mai 2009 à 17:27
salut jipicy
j'ai un pb avec grep et je ne vois pas l'erreur car au lieu de me prendre les 7 ligne que je le demande il me prend presque toutes les lignes choses que je ne comprend alors que pour d'autres fchiers il fait bien le grep.
je poste la mon scripts et le fichier surlequel j'effctue le grep .j'aimerai juste avoir les 7 lignes contenant le pourcentage des tables

#!/bin/bash
HOME=RAUD_BASES/
cd $HOME
fic=Raud_base.PHA
cat $fic | grep ^DATA >fichier
cat $fic | grep ^DATACHIM >> fichier
cat $fic | grep ^IND >>fichier
cat $fic | grep ^INDXCHIM >> fichier
cat $fic | grep ^RBS >> fichier
cat $fic | grep ^RBS_BATCH >> fichier
cat $fic | grep ^SYSTEM >> fichier
cat $fic | grep ^TEMP >> fichier
awk 'Begin { print"test la valeur du tablespace";FS=""}
{if ($7 > 90) print "CRITICAL TABLE "$1" "}
End' fichier

voici le fichier
============+======+======+=======+==========+======+=========
TABLESPACE Taille Libre +GdLib +GdLib Nbre %Occup
(Mo) (Mo) (Mo) (Ko) Libr
============+======+======+=======+==========+======+=========
DATA 520 54 54 55536 1 95 %
DATACHIM 360 90 90 92152 1 75 %
IND 1100 303 53 54000 53 72 %
INDXCHIM 100 4 3 3344 23 96 %
RBS 80 0 0 312 1 92 %
RBS_BATCH 250 50 43 43992 3 91 %
SYSTEM 50 38 38 39280 1 23 %
TEMP 200 197 56 57040 61 2 %
*
Fri Feb 6 13:48:30 MET 2009
HOPITAL PNOMHOP (PCODHOP) aud_exttab-d.sql le 06/02/2009 13h
PHARMA PVERSIO - Base PHA

LISTE DES TABLES DE CHIMIO AVEC NOMBRE EXTENTS >= 1

TABLE TBS IniKo NxtKo INC EXT MAX TotKo
------------------------------ ----------- ------- ------ ---- ---- ---- -------
ACTE DATACHIM 104 104 0 1 100 120
ACTE DATACHIM 104 104 0 1 100 120
ALLERGIE DATACHIM 104 104 0 1 100 16
ALLERGIE DATACHIM 104 104 0 1 100 120
ALLERGIE DATACHIM 104 104 0 1 100 120
ATTENTE DATACHIM 104 104 0 1 100 120
ATTENTE DATACHIM 104 104 0 1 100 120
CATEGORI DATACHIM 104 104 0 1 100 120
CATEGORI DATACHIM 104 104 0 1 100 120
CLASSETH DATACHIM 104 104 0 1 100 80
CLASSETH DATACHIM 104 104 0 3 100 360
CLASSETH DATACHIM 104 104 0 1 100 120
COMPOPDT DATACHIM 104 104 0 1 200 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CTLDCI_MED DATACHIM 104 104 0 1 200 120
CTRLPAT DATACHIM 104 104 0 1 200 120

j'ai fai un copie collé donc les colonne ne sont pas droites.
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
15 mai 2009 à 18:23
Re-

C'est un exemple avec un des fichiers où le grep ne marchent pas ?

En attendant essaye comme ça :
#!/bin/bash

HOME=RAUD_BASES/
cd $HOME
fic=Raud_base.PHA 

awk 'BEGIN { 
print "test la valeur du tablespace"
}
/^(DATA|IND|RBS|SYSTEM|TEMP)/ && $7 > 90 {
print "CRITICAL TABLE "$1 ": "$7
}
' < "$fic"
0
Slt jipicy
j'ai essayé ce ke ta proposé il ne marche tjrs pas il me donne plus de ligne demandée que ce qu'on lui demande.
voici le resultat qu'on je lance le script
laptopl@laptop:~$ ./frip.sh
test la valeur du tablespace
CRITICAL TABLE DATA: 95
CRITICAL TABLE INDXCHIM: 96
CRITICAL TABLE RBS: 92
CRITICAL TABLE RBS_BATCH: 91
CRITICAL TABLE INDICATION: 200
CRITICAL TABLE INDICATION_DCI: 200
CRITICAL TABLE INDICPHYSIO: 200
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDICDACLEK: 100
CRITICAL TABLE INDICDCCLEK: 100
CRITICAL TABLE INDICINCLEK: 100
CRITICAL TABLE INDICPHYSIO_I9CLEUNIK: 100
CRITICAL TABLE INDICPRCLEK: 100
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
CRITICAL TABLE INDEX: MAX
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 mai 2009 à 15:36
En me basant sur l'exemple de fichier que tu as donné, voila ce que ça donne chez moi :
[tmpfs]$ cat Raud_base.PHA
============+======+======+=======+==========+======+=========
TABLESPACE Taille Libre +GdLib +GdLib Nbre %Occup
(Mo) (Mo) (Mo) (Ko) Libr
============+======+======+=======+==========+======+=========
DATA 520 54 54 55536 1 95 %
DATACHIM 360 90 90 92152 1 75 %
IND 1100 303 53 54000 53 72 %
INDXCHIM 100 4 3 3344 23 96 %
RBS 80 0 0 312 1 92 %
RBS_BATCH 250 50 43 43992 3 91 %
SYSTEM 50 38 38 39280 1 23 %
TEMP 200 197 56 57040 61 2 %
*
Fri Feb 6 13:48:30 MET 2009
HOPITAL PNOMHOP (PCODHOP) aud_exttab-d.sql le 06/02/2009 13h
PHARMA PVERSIO - Base PHA

LISTE DES TABLES DE CHIMIO AVEC NOMBRE EXTENTS >= 1

TABLE TBS IniKo NxtKo INC EXT MAX TotKo
------------------------------ ----------- ------- ------ ---- ---- ---- -------
ACTE DATACHIM 104 104 0 1 100 120
ACTE DATACHIM 104 104 0 1 100 120
ALLERGIE DATACHIM 104 104 0 1 100 16
ALLERGIE DATACHIM 104 104 0 1 100 120
ALLERGIE DATACHIM 104 104 0 1 100 120
ATTENTE DATACHIM 104 104 0 1 100 120
ATTENTE DATACHIM 104 104 0 1 100 120
CATEGORI DATACHIM 104 104 0 1 100 120
CATEGORI DATACHIM 104 104 0 1 100 120
CLASSETH DATACHIM 104 104 0 1 100 80
CLASSETH DATACHIM 104 104 0 3 100 360
CLASSETH DATACHIM 104 104 0 1 100 120
COMPOPDT DATACHIM 104 104 0 1 200 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONDUITE DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CONNEX DATACHIM 104 104 0 1 100 120
CTLDCI_MED DATACHIM 104 104 0 1 200 120
CTRLPAT DATACHIM 104 104 0 1 200 120

[tmpfs]$ awk 'BEGIN {
print "test la valeur du tablespace"
}
/^(DATA|IND|RBS|SYSTEM|TEMP)/ && $7 > 90 {
print "CRITICAL TABLE "$1 ": "$7
}
' Raud_base.PHA

test la valeur du tablespace
CRITICAL TABLE DATA: 95
CRITICAL TABLE INDXCHIM: 96
CRITICAL TABLE RBS: 92
CRITICAL TABLE RBS_BATCH: 91

[tmpfs]$
Ou il y a un problème sur ton fichier (vérifie les fins de lignes (cat -A fichier)), ou tu ne m'as pas donné le fichier dans son intégralité et des paramètres m'échappent ;-((
0
effectivement je t'ai pas donné le fichier en intégralité car de dernier est vraiment long, j'ai verifié les fins de lignes avec la commande que tu m'a donné cela me semble etre normal.quand je coupe le fichier en deux le resultat est parfait mais kon je l'applique sur la totalité la ça bug.pourtant ta commande /^(DATA|IND|SYSTEM|TEMP) demande bien a selectionnes les caracteres spécifiés donc je ne vois pas.
voici une partie du debut et de la fin du fichier effectivement il m'affiche dans le resultat les INDICDACLEK INDEX MAX il doit prendre ces colonnes la .
============+======+======+=======+==========+======+=========
TABLESPACE Taille Libre +GdLib +GdLib Nbre %Occup
(Mo) (Mo) (Mo) (Ko) Libr
============+======+======+=======+==========+======+=========
DATA 520 54 54 55536 1 95 %
DATACHIM 360 90 90 92152 1 75 %
IND 1100 303 53 54000 53 72 %
INDXCHIM 100 4 3 3344 23 96 %
RBS 80 0 0 312 1 92 %
RBS_BATCH 250 50 43 43992 3 91 %
SYSTEM 50 38 38 39280 1 23 %
TEMP 200 197 56 57040 61 2 %
*
Fri Feb 6 13:48:30 MET 2009
HOPITAL PNOMHOP (PCODHOP) aud_exttab-d.sql le 06/02/2009 13h
PHARMA PVERSIO - Base PHA
HOPITAL PNOMHOP (PCODHOP) aud_exttab-d.sql le 06/02/2009 13h
PHARMA PVERSIO - Base PHA

LISTE DES INDEX DE CHIMIO AVEC NOMBRE EXTENTS >= 1

INDEX TBS IniKo NxtKo INC EXT MAX TotKo
------------------------------ ----------- ------- ------ ---- ---- ---- -------
INDICDACLEK INDXCHIM 104 16 0 1 100 120
INDICDCCLEK INDXCHIM 104 16 0 1 100 120
INDICINCLEK INDXCHIM 104 16 0 1 100 120
INDICPHYSIO_I9CLEUNIK INDXCHIM 104 16 0 1 100 120
INDICPRCLEK INDXCHIM 104 16 0 1 100 120
INTFPCODESV INDXCHIM 104 16 0 1 100 120
INTFPCODESV INDXCHIM 104 16 0 1 100 120
INTFPCODEU2 INDXCHIM 104 16 0 1 100 120
INTFPCODEU2 INDXCHIM 104 16 0 1 100 120
INTFPNOMPAT INDXCHIM 104 16 0 1 100 120
INTFPNOMPAT INDXCHIM 104 16 0 28 100 552
INTFPNOOBST INDXCHIM 104 16 0 1 #### 120
INTFPNOOBST INDXCHIM 104 16 0 180 #### 2984
INTFPPACLEK INDXCHIM 104 16 0 1 100 120
INTFPPACLEK INDXCHIM 104 16 0 1 100 120
INTFTCODEIF INDXCHIM 104 16 0 1 100 120
INTFTCODEIF INDXCHIM 104 16 0 1 100 120
INTFTI5CLEK INDXCHIM 104 16 0 1 100 120
INTFTI5CLEK INDXCHIM 104 16 0 1 100 120
INTFTM0CLEK INDXCHIM 104 16 0 1 100 120
INTFTM0CLEK INDXCHIM 104 16 0 1 100 120
INTFTNMSGG INDXCHIM 104 16 0 1 100 120
INTFTNMSGG INDXCHIM 104 16 0 1 100 120
INTF_CODEPT INDXCHIM 104 16 0 1 100 120
INTF_CODEX1 INDXCHIM 104 16 0 1 100 120


INDEX TBS IniKo NxtKo INC EXT MAX TotKo
------------------------------ ----------- ------- ------ ---- ---- ---- -------
LIGNE_CODEANA IND 104 16 0 1 100 120
LIGNE_CODENOMENCLA IND 104 16 0 5 100 184
LIGNE_DGCLEUNIK IND 104 16 0 1 100 120
LIGNE_DSCLEUNIK IND 104 16 0 1 100 120
LIGNE_MACLEUNIK IND 104 16 0 9 100 248
LIGNE_NMCLEUNIK IND 104 16 0 5 100 184
LIGNE_NUMMARCHE IND 104 16 0 9 100 248
LIGNE_SERVICE IND 304 56 0 3 100 480
LIINDEX2 IND 2520 256 0 1 100 2520
LOCALL3CLEK DATA 104 16 0 1 100 120
LOINDEX3 IND 2520 256 0 1 100 2520
LOTDISP_E2CLEUNIK IND 304 56 0 8 100 880
LOTDISP_F0CLEUNIK IND 104 16 0 1 100 120
LOTDISP_I1CLEUNIK IND 104 16 0 1 100 120
LOTDISP_M0CLEUNIKADM IND 104 16 0 21 100 472
LOTDISP_PLCLEUNIK IND 104 16 0 22 100 488
LOTPDT_E2CLEUNIK IND 200 56 0 1 100 200
LOTPDT_M4CLEUNIK IND 200 56 0 1 100 200
LOTPDT_MAGASIN IND 200 56 0 1 100 200
LPRETR_L2CLEUNIK IND 104 16 0 1 100 120
LPRETR_PRCLEUNIK IND 104 16 0 1 100 120
LPRETR_PTCLEUNIK IND 104 16 0 1 100 120
LPROTOPH_FREQUENCE IND 104 16 0 1 100 120
LPROTOPH_MODEADM IND 104 16 0 1 100 120
LPROTOPH_P4CLEUNIK IND 104 16 0 1 100 120
LPROTOPH_PRCLEUNIK IND 104 16 0 1 100 120
LPROTOPH_VOIE IND 104 16 0 1 100 120
M0INDEX2 IND 16 16 0 1 100 16
M1INDEX2 IND 1504 152 0 2 100 1680
MAGGARDE_MAGGARDE IND 104 16 0 1 100 120
MAGGARDE_SERVICE IND 104 16 0 1 100 120
MAINDEX2 IND 16 16 0 1 100 16
MAINDEX3 IND 16 16 0 1 100 16
MAINDEX4 IND 16 16 0 1 100 16
MARCHE_DQCLEUNIK IND 104 16 0 1 100 120
MATSPEC_RPCLEUNIK IND 104 16 0 1 100 120
MATSPFPCLEK DATA 104 16 0 1 100 120
MATSPMSCLEK DATA 104 16 0 1 100 120
MATSPR0CLEK DATA 104 16 0 1 100 120
MATSPTVCLEK DATA 104 16 0 1 100 120
MDSERV_SERVICE IND 104 16 0 1 100 120
MEDECIN_E2CLEUNIK IND 104 16 0 1 100 120
MEDECIN_SERVICE IND 104 16 0 1 100 120
MEDECIN_SMCLEUNIK IND 104 16 0 1 100 120
MEDECIN_SPCLEUNIK IND 104 16 0 1 100 120
MEDESSAI_ESCLEUNIK IND 104 16 0 1 100 120
MEDESSAI_M0CLEUNIK IND 104 16 0 1 100 120
MEDESSAR_ESCLEUNIK IND 104 16 0 1 100 120
MEDESSAR_M0CLEUNIK IND 104 16 0 1 100 120
MOTIFDIS_MDCLEUNIK IND 104 16 0 1 100 120
MOTIFMTCLEK DATA 104 16 0 1 100 120
MOTIFRET_M4CLEUNIK IND 104 16 0 1 100 120
MQFORCODEMF DATA 104 16 0 1 100 120
MQFORMFCLEK DATA 104 16 0 1 100 120
MQFORUTCC
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
16 mai 2009 à 18:15
Essaie comme ça :
awk 'BEGIN {
print "test la valeur du tablespace"
}
/^(DATA|IND[ X]|RBS|SYSTEM|TEMP)/ && $7 > 90 {
print "CRITICAL TABLE "$1 ": "$7
}
' Raud_base.PHA
;-)
0
merci jipi ça marche mais j'aimerai bien savoir pourquoi [ X] qu'est ce ki ça change dans la recherche du fichier.
aussi je ne sais pas si tu peux m'aider dans le sens, je travaille en ce moment sur nagios j'aimerai associé a chacune des machines une documentation.un script permettant d'ouvrir openoffice et y enregistrer la doc.si ta une ptite idée
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 895
17 mai 2009 à 09:14
Dans la 1ère forme de la regex :

/^(DATA|IND|RBS|SYSTEM|TEMP)/


que l'on peut réduire à :

/^IND/

pour l'explication concernant ton cas, on cherchait donc toutes les lignes commençant par IND, ce qui fait que les correspondances se faisaient aussi bien pour :

IND 100 ...
INDXCHIM
INDEX
INDICDACLEK
INDICDCCLEK
INDICINCLEK
INDICPHYSIO
INDICPRCLEK

ce qui est logique.

Par contre dans la dernière forme :

^IND[ X]

on cherche toujours les lignes commençant par IND, mais suivies soit d'un espace ( ), soit d'un X, ce qui exclue toutes les autres formes.

Pour ton autre question je n'ai pas tout compris, mais il vaut mieux que tu ouvres un autre post pour ça.

;-))
0
j'aimerai mettre une boucle if pour respectez les 3 conditions qui suit
if $7 > 93 && $7 < 97 {print "WARNING TABLESPACE "$1 ": "$7
if $7 > 97 {print " CRITICAL TABLESPACE "$1 ": "$7
$7 < 93 {print " OK TABLESPACE "$1
quand je l'ajoute dans le awk il ne respecte pas la condition du grep il me sort plusieur lignes
0