KSH extraction de variable dans un fichier

Résolu
caro -  
 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

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Rien compris ;-((

    Il doit ressembler à quoi ton fichier final par rapport à ton fichier original ?
    0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    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
    1. caro
       
      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
    2. 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
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaye avec "sed" alors :

      sed -n 's/.*\(\${EXPORT[^}]*}\).*/\1/gp' plop  | sort -u
      0
  3. caro
     
    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
  4. caro
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. caro
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Essaie de doubler la protection sur le "\\n"
      0
  7. caro
     
    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