Incrémenter un nom de variable

Résolu/Fermé
nicole-rene - 19 mars 2010 à 16:02
 nicole-rene - 19 mars 2010 à 17:10
Bonjour, je cherche a incrémenter le nom d'une variable dans une boucle pour positionner des variables différentes en sortie de boucle .
par exemple.
je lis des valeurs dans un fichier et positionne par un set :j'ai donc n fois les valeurs $1,$2 (ici un nom de disk et son volume),:


set 'head -200 $serveur|grep "/dev/" |grep %|awk '{print $1,$2}''

ce qui me donne :"/dev/hda1 75890620 /dev/hda2 75890620......."

ensuite je pensais faire :
N=1
while [ ! -S $1 ] ;do DISK$N=$1 ;Vol$N=$2"; N='expr $N + 1'; shift 2; done
mais je ne sais pas incrémenté le nom de ma variable
pour pouvoir mettre en forme dans un fichier de sortie ainsi:
par echo "$serveur;$DISK1:$Vol1;$DISK2;$Vol2;;;;;;
pour renseigner un fichier csv avec des champs vide ou non le nombre de disque étant limité
<Nom de serveur>;<nom disqu1>;volume disque 1>;<nom disque 2>;volume disque 2>
ce qui pourrai me donner :
Serveur toto;dev/hda1 ;75890620;/dev/hda2 ;75890620;;;;autres donnés;
Serveut tata;dev/hda1 ;75890620;;;;;;autres donnés;

avez vous des idées ?
Merci

2 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 897
19 mars 2010 à 16:10
Salut,

On peut avoir une dizaine de ligne de "head -200 $serveur" s'il te plaît ?

Merci.
0
nicole-rene
19 mars 2010 à 16:12
oui pourquoi?
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 897
19 mars 2010 à 16:16
Pour faire des test en live ;-))
0
nicole-rene
19 mars 2010 à 16:20
dans mon script je n'ai qu'une commande head qui récupére autant de valeurs que de couples disk /volume
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 897
19 mars 2010 à 16:22
Merci de poster une dizaine de ligne du résultat de la commande sus-citée !

Par expérience, il vaut mieux travailler sur du concret que sur des explications ;-(
0
nicole-rene
19 mars 2010 à 16:24
$serveur est 1 fichier par serveur qui contient un ensemble d'info dont le résutat d'un df
le grep me permet de récupérer les nom de disk et leurs volume.
Une simul consisterais a mettre le résultat d'un df dans un fichier avec de préférence plusieur disk .avec 1 c'est facil ;-)
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 897
19 mars 2010 à 16:45
Essaye comme ça :

[tmpfs]$ cat plop
SERVEUR_TOTO
/dev/hda2 6999
/dev/hda1 10004
/dev/sdb1 183
/dev/sdb3 10119
/dev/sdb4 4138
/dev/sdb5 957
/dev/sdb6 4770
/dev/sdb7 7633
/dev/sdb8 957
/dev/sdb9 957
/dev/sdb10 9539

[tmpfs]$ sed ':z;N;$! bz;s/ \|\n/;/g' plop
SERVEUR_TOTO;/dev/hda2;6999;/dev/hda1;10004;/dev/sdb1;183;/dev/sdb3;10119;/dev/sdb4;4138;/dev/sdb5;957;/dev/sdb6;4770;/dev/sdb7;7633;/dev/sdb8;957;/dev/sdb9;957;/dev/sdb10;9539

[tmpfs]$

;-))
0
nicole-rene
19 mars 2010 à 16:57
les fichiers d'origine contienent 200000 lignes a exploiter et la ligne sur laquelje récupére les valeurs sont des lignes entiére ressemble plutot a :
/dev/hda1 75890620 1847448 70188080 3% /
/dev/hda2 75890620 1847448 70188080 3% /
/dev/hda3 75890620 1847448 70188080 3% /
/dev/hda4 75890620 1847448 70188080 3% /
/dev/hda5 75890620 1847448 70188080 3% /
le grep dev et grep % me permettent de selectionner les bonnes lignes je ne peux pas lire mes données autrement ,j'ai d'autre par d"autre données colléectées a mettre ma sortie csv
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 897
19 mars 2010 à 17:01
En gardant ta syntaxe essaye :

head -200 $serveur|grep "/dev/" |grep %|awk '{print $1,$2}' | sed ':z;N;$! bz;s/ \|\n/;/g' plop
0
nicole-rene
19 mars 2010 à 17:10
en fait en me débrouillant autrement finalement je peu aussi écrire
set ''head -200 $serveur|grep "/dev/" |grep %|awk '{print $1,$2}'
suivit par mon echo "nom de serveur;$1;$3;$5:$2;$3" >>fichier de sortie
en fait je me suis un peu perdue en voulant compter le nombre de disque mais au final il n'y en aura pas plus de 5 et les champs deront laissés a vide .Donc finalement je crois que je me suis compliquée pour rien :-))
Merci pour l'aide et le moment passé je garde le sed de coté car c vrai je ne l'utilise pas souvent ,ça oeut être util pour les mise en forme! bonne soirée
0