Bonjour tout le monde,

Je suis en train de faire un script de surveillance de process pour le boulot.
J'ai un fichier de config qui contient des lignes du type :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
DeskI_JSLAUNCH='"/apps/boe/bobje/enterprise115/generic/bobjrestart.sh" -protect "/apps/boe/bobje/enterprise115/aix_rs6000/boe_jobsd" -lib pp_procFC -jsTypeDescription  "Desktop Intelligence Job Server" -objectType CrystalEnterprise.FullClient -name parva7304173.DeskI_JS -ns parva7304173 -type MIXEDPROC -loggingPath "/apps/boe/bobje/logging" -pidFile "/apps/boe/bobje/serverpids/parva7304173.DeskI_JS_DeskIJobServer.pid" -restart -protocol default -fg'
ou

Code : Sélectionner tout - Visualiser dans une fenêtre à part
webiserver2LAUNCH='"/apps/boe/bobje/enterprise115/generic/bobjrestart.sh" -protect "/apps/boe/bobje/enterprise115/aix_rs6000/WIReportServer" -name parva7304173.webiserver2 -ns parva7304173 -service -loggingPath "/apps/boe/bobje/logging" -pidFile "/apps/boe/bobje/serverpids/parva7304173.webiserver2_WebIReportServer.pid" -restart -protocol default -fg'
De ca, je dois sortir différents champ :
- deski
- boe_jobsd
- parva7304173.DeskI_JS_DeskIJobServer.pid
puis
- webiserver2
- WIReportServer
- parva7304173.webiserver2_WebIReportServer.pid

Comme vous le voyez, les champs ont des longueurs différentes, ils peuvent ne pas être placés dans le même ordre, etc.

Pour commencer et récupérer le process à surveiller je fais :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
line=<MaLigneDeTexteARallonge>
   echo "$line"
   Idx_LAUNCH=$(echo $line | awk '{print index($1, "LAUNCH")}')
   echo "L'index est : $Idx_LAUNCH"
   let "Idx_MoinsUn=$Idx_LAUNCH-1"
   echo "L'index -1 est : \"$Idx_MoinsUn\""
   echo "$line"
   echo $line | awk '{print substr($1, 1, 8)}'
Me renvoie :
Code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
DeskI_JSLAUNCH='"/apps/boe/bobje/enterprise115/generic/bobjrestart.sh" -protect "/apps/boe/bobje/enterprise115/aix_rs6000/boe_jobsd" -lib pp_procFC -jsTypeDescription  "Desktop Intelligence Job Server" -objectType CrystalEnterprise.FullClient -name parva7304173.DeskI_JS -ns parva7304173 -type MIXEDPROC -loggingPath "/apps/boe/bobje/logging" -pidFile "/apps/boe/bobje/serverpids/parva7304173.DeskI_JS_DeskIJobServer.pid" -restart -protocol default -fg'
L'index est : 9
L'index -1 est : "8"
DeskI_JSLAUNCH='"/apps/boe/bobje/enterprise115/generic/bobjrestart.sh" -protect "/apps/boe/bobje/enterprise115/aix_rs6000/boe_jobsd" -lib pp_procFC -jsTypeDescription  "Desktop Intelligence Job Server" -objectType CrystalEnterprise.FullClient -name parva7304173.DeskI_JS -ns parva7304173 -type MIXEDPROC -loggingPath "/apps/boe/bobje/logging" -pidFile "/apps/boe/bobje/serverpids/parva7304173.DeskI_JS_DeskIJobServer.pid" -restart -protocol default -fg'
DeskI_JS
Donc je récupère bien mon premier champ
Mais si je remplace

Code : Sélectionner tout - Visualiser dans une fenêtre à part
echo $line | awk '{print substr($1, 1, 8)}'
par

Code : Sélectionner tout - Visualiser dans une fenêtre à part
echo $line | awk '{print substr($1, 1, $Idx_MoinsUn)}'#sachant que Idx_MoinsUn=8
J'obtiens

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
awk : 0602-562 La zone $() n'est pas correcte.
Le numéro de la ligne de saisie est 1.
Le numéro de la ligne source est 1.
Pouvez vous m'indiquer la raison de cette erreur?? (je sais que vous le pouvez )

Bonne journée.

PS : je travaille sur de l'AIX 5.3 avec ksh.

Résolu en remplacant ma dernière ligne par :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
   echo "$line $Idx_LAUNCH" | awk '{print substr($1, 1, $NF)}'