Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/11/2011, 22h03   #1
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Par défaut meminfo dans vmstat

Bonsoir à tous,
J'essaie d'afficher la mémoire utilisée dans le vmstat, mais sans succès.

Code :
1
2
3
4
5
6
7
8
9
 
total=`cat /proc/meminfo | grep MemTotal | awk '{print $2}'`
free=`cat /proc/meminfo | grep MemFree | awk '{print $2}'`
used=$(((total-free)/1024))
 
 
printf "CPU en \045\tRAM en Mo\res\t total des res\n" > test.xls
vmstat $1  $2 | awk -v i='-2' '{value=$used; Total+=value; print 100-$15 "\t\t" $4/1024 "\t\t" $4*(100-$15)/1024 "\t\t" Total}' >> test.xls;
 sed -i".bak" '2,3d' test.xls
je veux afficher la valeur de la mémoire utilisée lors de la commande vmstat.
Quelqu'un à une idée ?
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 14/11/2011, 00h30   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

Code :
1
2
3
used=$(awk '/MemTotal/ { total = $2 } /MemFree/ { free = $2; printf("%d\n", ( total - free ) / 1024)}' /proc/meminfo)
 
vmstat $1 $2 | awk -v i='-2' -v value=$used '! /[[:alpha:]]/ { Total+=value; printf("%d\t\t%d\t\t%d\t\t%d\n", 100-$15,  $4/1024,  $4*(100-$15)/1024, Total)}'
ton problème, c'est que $used n'est pas développée (comme toute variable shell) entre guillemets simples '
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 21h10   #3
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Merci, mais la valeur ne varie jamais. Lorsque je lance la commande pendant 1minute et que j'effectue des actions (lancement de programme, ...) la valeur ne bouge pas.
Comment corriger cela ?
De plus, lorsque la valeur " 100-$15" me retourne 0, je voudrais avoir 1 à la place.

Savez vous comment je peux faire ?
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 22h02   #4
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

Citation:
la valeur ne varie jamais
ce n'est pas normal, puisqu'à chaque ligne Total est augmenté de la valeur de value.
Par contre que value/used ne change pas c'est normal, puisqu'il n'est défini qu'une fois avant de lancer la commande vmstat.

Citation:
lorsque la valeur " 100-$15" me retourne 0, je voudrais avoir 1 à la place
tu affectes le calcul à une variable, puis tu peux soit tester la valeur avec un if, soit utiliser un opérateur ternaire.

Tutoriel gawk
le manuel de gawk
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 22h32   #5
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Oui, c'est bien la valeur value/used qui ne change pas. Je voudrais la définir à chaque fois, mais je n'y arrive pas.
Vous savez comment je peux m'y prendre ?
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/11/2011, 23h04   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
comme ça :
Code :
1
2
3
4
vmstat $1 $2 | awk \
-v i='-2' \
-v value=$(awk '/MemTotal/ { total = $2 } /MemFree/ { free = $2; printf("%d\n", ( total - free ) / 1024)}' /proc/meminfo) \
'! /[[:alpha:]]/ { Total+=value; printf("%d\t\t%d\t\t%d\t\t%d\n", 100-$15,  $4/1024,  $4*(100-$15)/1024, Total)}'
mais ça ne me plaît pas,je préférerais ne faire qu'un seul appel awk.
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 00h47   #7
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Merci du coup de main, mais la valeur ne varie pas.
Voici mon code complet:
Code :
1
2
3
4
 
vmstat $1 $2 | awk \
-v value=$(awk '/MemTotal/ { total = $2 } /MemFree/ { free = $2; printf("%d\n", ( total - free ) / 1024)}' /proc/meminfo) \
'! /[[:alpha:]]/ {Total+=((100-$15)*value); print 100-$15 "\t\t" value "\t\t" ((100-$15)*value) "\t\t" Total value}'
De plus, j'ai essayé de mettre ceci pour la condition, mais sans y parvenir:
Code :
{if((pourc==0)); then ((pourc=1)) fi;
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 15/11/2011, 01h49   #8
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
oui, je n'ai pas réfléchi plus que ça, mais c'est normal : value n'est aussi défini qu'une fois lors de l'appel de gawk, et non lorsque gawk lit une ligne. Pour ça, il faut utiliser getline deux fois (pour MemTotal, et pour MemFree), fermer /proc/meminfo (sinon la lecture de meminfo se poursuit sans revenir au début du fichier), faire quelques substitutions pour ne conserver que les nombres des variables assignées grâce à getline, et enfin calculer value.

Il faut vraiment que tu lises la doc que j'ai mise en lien plus haut.

opérateur ternaire :
exemple :
Code :
1
2
3
4
$ gawk 'BEGIN{ print ( var ? var : 1 ) }'
1
$ gawk -v var1=10 -v var2=2 'BEGIN{ var = var1 + var2 ; print ( var ? var : 1 ) }'
12
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/11/2011, 18h19   #9
Candidat au titre de Membre du Club
 
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 11
Points : 11
Bonjour,
Je reviens vers vous, car je n'ai pas réussi à faire varier la mémoire.
J'ai bien regardé la doc de getline, mais j'ai pas été plus avancé.
Vous pourriez me dire comment utiliser cela dans le vmstat.
Je suis complètement bloqué.
Merci de m'aider (encore)
RomJo est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 19/11/2011, 20h18   #10
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
cat >tagada
ta
ga
da
tsoin
tsoin
$ echo "foo
bar
baz
foobar" | awk '{ getline var1 <"./tagada"; getline var2 <"./tagada"; close("./tagada") }; {print $0,var1,var2}'
foo ta ga
bar ta ga
baz ta ga
foobar ta ga
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 09h29.


 
 
 
 
Partenaires

Hébergement Web