KSH extraction de variable dans un fichier

Résolu/Fermé
caro - 14 mai 2012 à 12:00
 caro - 14 mai 2012 à 16:19
Bonjour,
J'ai un fichier contenant n lignes de type :

return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} && ${status} -ne ${EXPORT_REP} ]] ; then
return ${EXPORT_ERREUR}
name="${EXPORT_COND_PREFIX}???${CLE_IMS}*"
commande="${EXPORT_DELETECOND_COMMAND} -DELETE ${name} ${mmdd}"
if [[ ${status} -ne ${EXPORT_RETOUR_OK} && ${status} -ne ${EXPORT_RETOUR_ERREUR} ]] ; then
return ${EXPORT_RETOUR_ERREUR}
return ${EXPORT_RETOUR_OK}
return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} ] ; then

Je souhaite extraire toutes les variables uniquement de type ${EXPORT_xxxxxxx} depuis mon fichier afin de me creer un autre fichier2 sachant que sur une même ligne il est possible d'avoir 2 variables de type ${EXPORT ....
Je dois ensuite trier ce fichier2 et eliminer les variables ${EXPORT......} doublons.
Je suis sous KSH ... j'essaie en awk mais comme je ne maitrise pas assez je galere pas mal ...
Quelqu'un pourrait-il m'aider ??
Merci par avance
Caro



A voir également:

6 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 12:05
Salut,

Rien compris ;-((

Il doit ressembler à quoi ton fichier final par rapport à ton fichier original ?
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 12:16
A tout hasard, c'est ça que tu veux ?
$ cat plop 
return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} && ${status} -ne ${EXPORT_REP} ]] ; then
return ${EXPORT_ERREUR}
name="${EXPORT_COND_PREFIX}???${CLE_IMS}*"
commande="${EXPORT_DELETECOND_COMMAND} -DELETE ${name} ${mmdd}"
if [[ ${status} -ne ${EXPORT_RETOUR_OK} && ${status} -ne ${EXPORT_RETOUR_ERREUR} ]] ; then
return ${EXPORT_RETOUR_ERREUR}
return ${EXPORT_RETOUR_OK}
return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} ] ; then 

$ egrep -o '\$\{EXPORT[^}]*\}' plop | sort -u
${EXPORT_COND_PREFIX}
${EXPORT_DELETECOND_COMMAND}
${EXPORT_ERREUR}
${EXPORT_REP}
${EXPORT_RETOUR_ERREUR}
${EXPORT_RETOUR_OK}

0
Oui c'est tout a fait ca ... en clair j'ai n fichiers au depart contenant des lignes avec des variables ${EXPORT_xxxxx} le but du jeu c'est de creer une sorte de dictionnaire recensant toutes les variables ${EXPORT_xxxxx} utilisées dans les differents fichiers. Donc merci beaucoup pour ta rapidité .... je galere depuis ce matin car avant de demander j'ai essayé plusieurs solutions fournie sur Internet ... donc grand merci
Caro
0
Euh c'est encore moi ..... juste pour te dire :
la cde que tu m'as donné plante :
egrep: illegal option -- o
usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...

Visiblement il ne connait pas cette option ...
merci quand meme
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 13:48
Essaye avec "sed" alors :

sed -n 's/.*\(\${EXPORT[^}]*}\).*/\1/gp' plop  | sort -u
0
Salut,

merci pour la reponse mais l'option -o ne marche pas vaec le egrep
egrep: illegal option -- o
usage: egrep [ -bchilnsv ] [ -e exp ] [ -f file ] [ strings ] [ file ] ...

En entree mon fichier contient n lignes :(c'est en fait le resultat d'un grep fait sur plusieurs fichiers : ce grep portant sur la variable EXPORT)

return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} ] ; then
return ${EXPORT_RETOUR_ERREUR}
name="${EXPORT_COND_PREFIX}???${CLE_IMS}*"
commande="${EXPORT_DELETECOND_COMMAND} -DELETE ${name}"
if [[ ${status} -ne ${EXPORT_RETOUR_OK} && ${status} -ne ${EXPORT_RETOUR_ERREUR} ]] ; then
return ${EXPORT_RETOUR_ERREUR}
return ${EXPORT_RETOUR_OK}
return ${EXPORT_RETOUR_ERREUR}
if [ ${status} -ne ${EXPORT_RETOUR_OK} ] ; then
return ${EXPORT_RETOUR_ERREUR}
${EXPORT_RMDIR} "${rep_prod}"
if [ ${status} -ne ${EXPORT_RETOUR_OK} ] ; then
return ${EXPORT_RETOUR_ERREUR}
return ${EXPORT_RETOUR_OK}
return ${EXPORT_RETOUR_ERREUR}
fin ${EXPORT_NUMJOB_HOLD_JOBS_OK}| \
return${EXPORT_NUMJOB_DOCID_COLLECTION}| \
Info ${EXPORT_NUMJOB_PO_COLLECTION}| \
return ${EXPORT_NUMJOB_END_PRODUCTION})
groupe=${EXPORT_GROUPE_PREFIX}-${DATE_REVISION}${EXPORT_ACPROGRAM}
${EXPORT_NUMJOB_PO_VALIDATION}| \
${EXPORT_NUMJOB_CUSTO_INITIALISATION}| \
${EXPORT_NUMJOB_DATA_RECEPTION}| \
${EXPORT_NUMJOB_PUB_GENERATION}| \
Ajoute " -do ${EXPORT_DESTINATAIRE_COURRIER} V "${EXPORT_TAG}
commande="java -jar ${EXPORT_AGT_NAME} -t ${EXPORT_AGT} "


Apres tri et extraction des variables de type ${EXPORT_xxxx} Mon fichier en sortie doit avoir cette tête

${EXPORT_NUMJOB_CUSTO_INITIALISATION}${EXPORT_NUMJOB_DATA_RECEPTION}
${EXPORT_NUMJOB_DOCID_COLLECTION}
${EXPORT_NUMJOB_END_PRODUCTION}
${EXPORT_DESTINATAIRE_COURRIER}
${EXPORT_NUMJOB_HOLD_JOBS_OK}
${EXPORT_NUMJOB_PO_COLLECTION}
${EXPORT_NUMJOB_PO_VALIDATION}
${EXPORT_NUMJOB_PUB_GENERATION}
${EXPORT_RMDIR}
.........

Comme le egrep avec l'option -o ne marche pas chez moi j'ai essaye la commande sans cette option et bref ca ne fait toujours pas ce que je veux

Grand merci a ceux qui ont une idée ....
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 13:55
Normal sans cette option le résultat ne peut être le même ;-(

Voir la proposition avec sed : https://forums.commentcamarche.net/forum/affich-25169753-ksh-extraction-de-variable-dans-un-fichier#5
0
Merci cette solution marche mais par sur tout mon fichier je viens d'isoler les lignes pour lesquelles en sortie je n'ai pas ma variable EXPORT_ traitée :

Voila mon fichier
${EXPORT_NUMJOB_PUB_GENERATION}|
Ajoute -dot ${EXPORT_DEST_COURRIER} V \${EXPORT_TAG_COURRIER}
java -jar ${EXPORT_AGT_NAME} -t ${EXPORT_FOR_AGT} ${PARAM_AGT_LOG}
java -jar ${EXPORT_AGT_NAME} -t ${EXPORT_AGT_DIR} ${EXPORT_CMD_SPEC}

et le resultat :
${EXPORT_CMD_SPEC}
${EXPORT_FOR_AGT}
${EXPORT_NUMJOB_PUB_GENERATION}
${EXPORT_TAG_COURRIER}

il manque en sortie :
${EXPORT_DEST_COURRIER}
${EXPORT_AGT_NAME}
${EXPORT_AGT_DIR}

je cherche de mon coté ... merci en tout cas
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 14:39
Effectivement ;-((

$ cat brol 
${EXPORT_NUMJOB_PUB_GENERATION}|
Ajoute -dot ${EXPORT_DEST_COURRIER} V \${EXPORT_TAG_COURRIER}
java -jar ${EXPORT_AGT_NAME} -t ${EXPORT_FOR_AGT} ${PARAM_AGT_LOG}
java -jar ${EXPORT_AGT_NAME} -t ${EXPORT_AGT_DIR} ${EXPORT_CMD_SPEC}

$ sed -n 's/[^$]*\(${EXPORT[^}]*}\)[^$]*/\1\n/gp' brol  | sort -u

${EXPORT_AGT_DIR}
${EXPORT_AGT_NAME}
${EXPORT_CMD_SPEC}
${EXPORT_DEST_COURRIER}
${EXPORT_FOR_AGT}
${EXPORT_NUMJOB_PUB_GENERATION}
${EXPORT_TAG_COURRIER}
${PARAM_AGT_LOG}

$

;-))
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci beaucoup mais Bon moi je dois avoir un environnement pourri parce que ça ne marche vraiment pas :
J'ai le mm fichier de depart que toi et apres le sed j'ai le resultat suivant :


${EXPORT_AGT_NAME}n$${EXPORT_CMD_SPEC}n
${EXPORT_AGT_NAME}n${EXPORT_FOR_AGT} ${PARAM_AGT_LOG}
${EXPORT_DEST_COURRIER}n${EXPORT_TAG_COURRIER}
${EXPORT_NUMJOB_PUB_GENERATION}n

... je suppose que les n c'est du retour chariot !!!
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 422
14 mai 2012 à 15:00
Essaie de doubler la protection sur le "\\n"
0
Ok merci mais je pense que comme je n'ai pas la bonne version de sed ça ne marche pas non plus ... mais bon je m'en suis sortie ... en fait je remplace apres mais "n" par un "\n" avec la commande tr et la c'est ok
en tout cas merci beaucoup
0