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 :
Code:
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:
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:
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:
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:
echo $line | awk '{print substr($1, 1, 8)}'
par
Code:
echo $line | awk '{print substr($1, 1, $Idx_MoinsUn)}'#sachant que Idx_MoinsUn=8
J'obtiens
Code:
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 :king:)
Bonne journée.
PS : je travaille sur de l'AIX 5.3 avec ksh.
Résolu en remplacant ma dernière ligne par :
Code:
echo "$line $Idx_LAUNCH" | awk '{print substr($1, 1, $NF)}'