Derouler simultanement 2 variables

Bonjour,

je suis sur u nprojet pour mettre a jour des fichier html

je doit donc faire différente modification sur le liens dans ces fichier ex: remplcer %20 par un espace et plusieur autre caractère

l'inconvenient et que j'ai stocké cette liste de caratère dans 2 fichier (carac spécial / carac remplacant ) pour qu'a l'avenir ce soit plus simple a modifier; cependant ca fait beaucoup d'operation d' I/O.

au debut de mon script je copie donc mes fichier chacun dans une variable.

puis je lance une boucle while en incrementant une variable pour au fur et a mesure recupérer le carc spécial et sont equivalent.

mais le faite de faire carc-spécial=$(echo liste_carac_special | cud -d: -f'$i') prend beaucoup de temps

auriez une solucion plus rapide a me proposer?

je souhaite garder le sistème de fichier pour une meilleur flexibilité pour l'avenir.

Merci

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. Modérateur
    Salut,

    Pour t'aider à optimiser ton traitement encore faudrait-il qu'on en comprenne toutes les subtilités ;-\

    Donc un petit exemple de ce que tu fais, fichier d'entrée, fichiers de correspondance et script seraient les bienvenus ;-)
    1. ex :

      Carac spéciaux | remplacant
      |
      & | &
      é | e
      Äô | a

      vaoici un exemple de mes fichier

      par la suite je recupère un lien html dans un fichier et fait un sed dessus

      ligne=$(echo ligne| sed 's|\'$carac-special'|\'$carac-remplacant'|g');

      il faut donc recupérer dans les variables carac-special et carac-remplacant les 2 caractère correspondant dans chacun des 2 fichier.

      attention cette opération ce produit à chaque nouveau lien (total environ 50 000 liens)

      merci
      1. Modérateur
        Tu mets tes correspondances dans un fichier texte (encodage.sed) du genre :
        s/[éèêë]/e/g
        s/[àâä]/a/g
        s/Äô/a/g
        etc.
        Puis tu appelles ton fichier :
        ligne="$(echo $ligne| sed -f encodage.sed)"
        ;-))
        1. d'abord merci

          Mais ceraisse possible de faire ca ?

          s/[éèêë]/e/g
          s/[àâä]/a/g
          s/Äô/a/g
          etc.

          Puis tu appelles ton fichier :

          varsed=$(cat encodage.sed)

          ligne="$(echo $ligne| sed -f $varsed)"

          Merci
          1. Modérateur
            Je ne vois pas l'intérêt ? ;-\
        2. l'interert et de lire dans une variable (en Ram) qui aura ete chargé au début du soft plus que 1 acces fichier à chaque lien html dans mon fichier
          1. Modérateur
            Ah ok... malheureusement non, on ne peut pas appeler le contenu d'une variable de cette manière avec "sed", il faut absolument que ce soit un fichier ;-(

            J'avais peut-être pensé au Sticky_Bit, mais normalement c'est valable pour un exécutable, donc je ne sais pas si ça le fera aussi sur un fichier en lecture seule ? ;-\
            1. dsl ca n'optimise pas beaucoupt

              Sinon est-il possible de mettre chaque ligne d'un fichier dans une variable différente

              je c que c possible

              mais ce qui serai bien c'est que ca ce fasse automatiquement avec une longueur de fichier quequonque et le nom des variable qui s'incremente tout seul?

              merci
              1. Modérateur
                Dsl ca n'optimise pas beaucoup
                Comment t'y-es-tu pris ?

                Je pensais à ça :
                - Créé un script bash (foo.sh) avec :
                #! /bin/sh
                
                sed '
                s/[éèêë]/e/g
                s/[àâä]/a/g
                s/Äô/a/g
                ' <<<${@}
                - Rendre le fichier exécutable avec le sticky-bit :
                chmod 1755 foo.sh
                - Puis à l'intérieur de ton script, avoir une ligne de traitement du genre :
                ligne="$(./foo.sh ${ligne})" 
                À tester...