#1 Le 25/04/2008, à 09:56
- iuchiban
[Résolu] Utilisation de awk avec option index et substr
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 :
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
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 :
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 :
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
echo $line | awk '{print substr($1, 1, 8)}'
par
echo $line | awk '{print substr($1, 1, $Idx_MoinsUn)}'#sachant que Idx_MoinsUn=8
J'obtiens
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.
Dernière modification par iuchiban (Le 25/04/2008, à 13:47)
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne
#2 Le 25/04/2008, à 12:45
- iuchiban
Re : [Résolu] Utilisation de awk avec option index et substr
Pas même une petite idée??
Ceci n'est pas un post d'impatience, mais consiste simplement à faire un UP dans la liste des messages récents).;)
Résolu en remplacant ma dernière ligne par :
echo "$line $Idx_LAUNCH" | awk '{print substr($1, 1, $NF)}'
Dernière modification par iuchiban (Le 25/04/2008, à 13:46)
C'est depuis que Chuck Norris a laissé la vie sauve à un manchot que l'on dit que Linux est libre.
Chuck Norris n'a pas besoin d'éditer son premier message pour ajouter [Résolu]. Chuck Norris est toujours [Résolu], quoi qu'il arrive.
Hors ligne