IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

problème de variables avec script awk


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut problème de variables avec script awk
    voici mon programme :
    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
     
    #!/bin/sh
    cd .
    for fichier in /var/opt/REPORT_DETAILS_20080118T000121_0*
       do
      cat $fichier|
            awk 'BEGIN {FS=","} {nbre=0} {nombre=0}
            { if ($3 ~/^200712/ )
      if ( $2 =="Used" )
    { $nbre=$nbre + 1 }
     if ( $2 =="Available" )
            { $nombre=$nombre + 1 }
    #print $nbe
     
            }
     
            END {
            { print "le nombre Used est :",$nbre }
    { print "le nombre available est :"$nombre }
    }'>test.txt
    done
    mon problem est le suivant j'obtiens la meme valeur pour $nbre et $nombre alors sa ne devrais pas etre le cas.
    Aider moi a identifier mon problem et a le resourdre svp!!

  2. #2
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    Le script ci-dessous fonctionne
    En awk, les variables utilisateur (comme nombre ou nbre) n'ont pas de $


    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
     
    for fichier in /var/opt/REPORT_DETAILS_20080118T000121_0*
       do
    	awk -F"," '
            {
    		if ($3 !~ /^200712/) next
      		if ($2 == "Used")
    		{
    			nbre++
    			next
    		} 
     		if ($2 == "Available")
    		{
    			nombre++
    		}
            }
            END {
            	print "le nombre Used est :",nbre 
    		print "le nombre available est :",nombre 
    	}' $fichier 
    done

  3. #3
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut
    ok merci
    mais les valeurs "nbre" et "nombre" retournés , ne concerne que le dernier fichier parcourue par ma boucle for;
    je veux que ce soit le result de TOUS les fichier parcouru

  4. #4
    Membre émérite Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Par défaut
    C'est mon dernier prix

    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
     
    cd .
    declare -a Resultat
    typeset -i NbreUsed=0
    typeset -i NbreAvailable=0
     
    for fichier in /var/opt/REPORT_DETAILS_20080118T000121_0*
       do
    	Resultat=($(awk -F"," -v NbreUsed=$NbreUsed -v NbreAvailable=$NbreAvailable '
            {
    		if ($3 !~ /^200712/) next
      		if ($2 == "Used")
    		{
    			NbreUsed++
    			next
    		} 
     		if ($2 == "Available")
    		{
    			NbreAvailable++
    		}
            }
            END {
    		print NbreUsed, NbreAvailable
    	}' $fichier))
    	NbreUsed=${Resultat[0]}
    	NbreAvailable=${Resultat[1]}
    	echo "+ $fichier : Cumul $NbreUsed - $NbreAvailable"
    done
     
    echo "+ FIN : TOTAUX : $NbreUsed - $NbreAvailable"

  5. #5
    Membre averti
    Inscrit en
    Juillet 2007
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Juillet 2007
    Messages : 13
    Par défaut error
    merci beaucoup BlaireauOne mais ....

    awk: syntax error near line 1
    awk: illegal statement near line 1
    + /var/opt/tdir : Cumul 0 - 0
    + FIN : TOTAUX : 0 - 0

  6. #6
    Membre confirmé
    Homme Profil pro
    Dev C++, CUDA
    Inscrit en
    Mai 2005
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Nouvelle-Zélande

    Informations professionnelles :
    Activité : Dev C++, CUDA
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2005
    Messages : 83
    Par défaut
    A premiere vue, il y a pas probleme avec le script ... Ca sera plus facile a debugger si tu avais un fichier test sur lequel on peut lancer le script ...

Discussions similaires

  1. Réponses: 0
    Dernier message: 16/04/2010, 17h21
  2. Problème de variable avec awk
    Par carlou135 dans le forum Linux
    Réponses: 5
    Dernier message: 24/11/2007, 09h30
  3. Problème de variables avec SQL
    Par sabchris dans le forum SQL
    Réponses: 2
    Dernier message: 01/10/2007, 10h10
  4. [Mail] Problème e-mail avec script developpez.com
    Par urbalk dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2007, 22h44
  5. problème de variable avec événement
    Par seb-oulba dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 08/09/2006, 17h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo