KSH extraction de variable dans un fichier

[Résolu/Fermé]
Signaler
-
 caro -
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



6 réponses

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
Salut,

Rien compris ;-((

Il doit ressembler à quoi ton fichier final par rapport à ton fichier original ?
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
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}

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
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
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
Essaye avec "sed" alors :

sed -n 's/.*\(\${EXPORT[^}]*}\).*/\1/gp' plop  | sort -u
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 ....
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
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
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
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
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}

$

;-))
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 !!!
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 348
Essaie de doubler la protection sur le "\\n"
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