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 11/09/2007, 17h11   #1
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2004
Messages : 24
Points : 10
Points : 10
Envoyer un message via Yahoo à zebulon90
Par défaut Boucle awk non finie

Bonjour à tous,

Voilà mon problème:
J'ai un fichier comme suit:

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mpath25 (xxxxx) yyyyy XXXXXX
[size=10.0G][features=0][hwhandler=0]
\_ abc 0 [prio=0][active]
 \_ 1:0:2:4 disk23 66:112 [active][undef]
 \_ 0:0:2:4 disk2 8:224  [active][undef]
mpath3 (xxxxx) yyyyy XXXXXX
[size=30G][features=0][hwhandler=0]
\_ abc 0 [prio=0][active]
 \_ 1:0:5:4 disk12 66:224 [active][undef]
 \_ 0:0:5:4 disk76  65:80  [active][undef]
mpath24 (xxxxx) yyyyy XXXXXX
[size=10G][features=0][hwhandler=0]
\_ abc 0 [prio=0][active]
 \_ 1:0:1:4 disk45 66:32  [active][undef]
 \_ 0:0:0:4 disk43  8:64   [active][undef]
\_ round-robin 0 [prio=0][enabled]
 \_ 1:0:0:4 disk67 65:208 [active][undef]
 \_ 0:0:1:4 disk34  8:144  [active][undef]
Dans lequel je dois récupérer les champs en rouge.

Voici mon code en awk :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/awk -f
BEGIN {FS = " "
i=0}
{       if($4 == "IBM,2145")
                {
                print "path: "$1"    sur baie "$4
 
                getline
                getline
 
                while( $2 ~ /abc/)
                        {
                        getline
                        while( $3 ~ /disk*/)
                                {
                                print "disque: "$3
                                getline
                                }
                        }
                }
J'execute mon script tout simplement: ./monscript monfichier
Le problème est que lorsque j'arrive à la fin du fichier, je ne sors jamais de ma seconde boucle et le script m'affiche en boucle "disque : disk34"
En fait, awk ne s'arrête pas et ne trouve apparemment pas la fin de fichier.

Ais-je fait une erreur?

Merci d'avance pour votre aide

Quelques précisions:
OS: Linux
Shell : Ksh
Programmeur: Débutant
zebulon90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 22h11   #2
Membre expérimenté
 
Avatar de BlaireauOne
 
Inscription : mars 2007
Messages : 469
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mars 2007
Messages : 469
Points : 576
Points : 576
Ça se passera mieux en gérant la fin de fichier comme suit :

remplacer chaque getline par :
if (getline == 0) exit

Pour un débutant, c'est un petit awk pas mal du tout
__________________
Loi de Murphy:
La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.
BlaireauOne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 09h14   #3
Candidat au titre de Membre du Club
 
Inscription : août 2004
Messages : 24
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : août 2004
Messages : 24
Points : 10
Points : 10
Envoyer un message via Yahoo à zebulon90
Merci BlaireauOne, le "if (getline == 0) exit" fonctionne bien, je n'ai plus de boucle.
Et merci pour le compliment, je fait ce que je peux.

Mais bon, attendez vous à me voir revenir d'ici peu
zebulon90 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web