Probleme avc la commande awk

Résolu
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
Configuration: vmware(machine virtuelle) avc nxserver

9 réponses

  1. Modérateur
    Salut,
    awk 'Begin { print"test la valeur du tablespace";FS=""}
    { if ($7 > 30)  print " warning la table "$1" est pleine a "$7"% "} 
    ;-))
    3
    1. 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
      1. Modérateur
        De nada ;-))
        0
    2. 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
      1. Modérateur
        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
        1. 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
      2. Modérateur
        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
        1. 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
          1. Modérateur
            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
            1. 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
              1. Modérateur
                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
                1. 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