Extraire une chaine de caractére

Résolu
CYG -  
mecool23 Messages postés 6 Statut Membre -
Bonjour,
j ai besoin d extraire 2 chaines de caractère a partir des fichiers <interferogram.out> dans des sous répértoires différents et mettre ds un fichier texte <tmp.txt> le produit des deux chaines:
exemple
une partie du fichier <interferogram.out>

Data_output_format: complex_real4
Data_output_file_real_interferogram: int_out
Data_output_format_real_interferogram: real4
Flatearth correction subtracted: no
First_line (w.r.t. original_master): 8400
Last_line (w.r.t. original_master): 15190
First_pixel (w.r.t. original_master): 2798
Last_pixel (w.r.t. original_master): 3970
Multilookfactor_azimuth_direction: 5
Multilookfactor_range_direction: 1
Number of lines (multilooked): 1358
Number of pixels (multilooked): 1173
*******************************************************************
* End_interfero:_NORMAL
*******************************************************************

dans chaque sous répertoire y a un fichier <interferogram.out> les deux chaines qui m interéssent sont les deux nombres en gras

je veux extraire ces deux nombres et mettre leurs produit dans un fichier <tmp.txt>

le resultat cherché est comme suit:

16789098(le produit des deux nombres)
17890453
15678943
16843290
17327654
.
.
.
.
.

quelqu un peut m aider

merci d avance;

CYG
Configuration: Windows XP
Firefox 2.0.0.13

9 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    À adapter à ton cas...
    $ cat cyg 
    Data_output_format: complex_real4
    Data_output_file_real_interferogram: int_out
    Data_output_format_real_interferogram: real4
    Flatearth correction subtracted: no
    First_line (w.r.t. original_master): 8400
    Last_line (w.r.t. original_master): 15190
    First_pixel (w.r.t. original_master): 2798
    Last_pixel (w.r.t. original_master): 3970
    Multilookfactor_azimuth_direction: 5
    Multilookfactor_range_direction: 1
    Number of lines (multilooked): 1358
    Number of pixels (multilooked): 1173
    *******************************************************************
    * End_interfero:_NORMAL
    ******************************************************************* 
    
    $ echo "$(sed -n '/of lines\|of pixels/{s/.* //;H};${x;s/\n/ * /g;s/ \* //;p}' cyg)" | bc
    1592934
    $
    ;-))
    1
    1. CYG
       
      et pour généraliser cette commande à l ensembles des fichiers <interferogram.out> et mettre le résultat dans le fichier
      <tmp.txt>, vous avez une idée?

      __répertoire 1
      | |__interferogram.out
      |__répértoire 2
      | |__interferogram.out
      |__répértoire 3
      | |__interferogram.out
      |__répértoire 4
      | |__interferogram.out
      |__tmp.txt

      le résultat voulu extrait du fichier <tmp.txt>

      16534673
      12345679
      14567865
      17654379
      16534780

      merci d avance;

      CYG
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    En partant de "repertoire 1" (sinon change le point par le chemin du répertoire d'où commencer la recherche) :
    find . -type f -name "interferogram.out" -exec sed 'blablabla' {} >> tmp.txt \;
    ;-))
    0
  3. CYG
     
    find . -type f -name "interferogram.out" -exec sed '/of lines\|of pixels/{s/.* //;H};${x;s/\n/ * /g;s/ \* //;p}'
    j ai introduit cette commande, le résultat c étai un fichier qui contient tt les contenu des fichiers <interferogram.out> et à la fin le les deux nombre répéter 5ou 6 fois,

    je sais pas comment je vais vous envoyer le résultat ca sera bien explicite

    merci d avance

    CYG
    0
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Il manque le "-n" à la commande sed ;-\
    0
    1. CYG
       
      1402 * 1172 * 1402 * 1172 * 1402 * 1172 * 1402 * 1172 * 1402 * 1172 * 1402 * 1172

      1607 * 1177 * 1607 * 1177 * 1607 * 1177 * 1607 * 1177 * 1607 * 1177 * 1607 * 1177

      voici un extrait du fichier <tmp.txt>, dans le fichier <interferogram.out> les deux lignes (number of pixels et number of lines) se répétent 6 fois. et la commande n a pas éffectuée la multiplication.

      merci d avance

      CYG
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > CYG
         
        Voie au dessous ;-))
        0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Oups j'avais pas testé ;-((

    Essaye ça plutôt :
     find . -name "interferogram.out" -exec sed -n '/of lines\|of pixels/{s/.* //;H};${x;s/\n/ * /g;s/ \* //;p}' {} \; | bc >> tmp.txt
    ;-))
    0
  7. CYG
     
    mnt il effectue la miltiplication mais il multiplie tous les nombres aprés of pixels et of lines, je veux juste qu il fait ca juste une fois et qu il ne prends pas en considération les autres, et si possible que la recherche commence a partir de la ligne 388,et que la recherche s arréte aprés qu il trouve les deux chaines > puis il les multipli

    merci d avance

    CYG
    0
  8. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    mnt il effectue la miltiplication mais il multiplie tous les nombres aprés of pixels et of lines, je veux juste qu il fait ca juste une fois et qu il ne prends pas en considération les autres,
    Rajoutes ";q" après le "p" :
    {s/.* //;H};${x;s/\n/ * /g;s/ \* //;p;q}

    et si possible que la recherche commence a partir de la ligne 388,et que la recherche s arréte aprés qu il trouve les deux chaines > puis il les multipli
    Essaye avec ça alors en début d'expression:
    sed -n '388,/of pixels/{ /of lines\|of pixels/{s/.* //;H};${x;s/\n/ * /g;s/ \* //;p}}'
    ;-)
    0
    1. CYG
       
      bonjour
      voici la commande que j ai introduit:
      find . -name "interferogram.out" -exec sed -n '388,/of pixels/{ /of lines\|of pixels/{s/.* //;H};${x;s/\n/ * /g;s/ \* //;p;q}}' {} \; | bc >> tmp.txt
      le résultat est un fichier <tmp.txt> vide.

      merci d avance

      CYG
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > CYG
         
        Enlève le ";q" et ça devrait passer ;-))

        Si ça passe pas, colles-moi ton fichier sur cjoint pour que je puisse faire des tests.
        Comme je te l'ai déjà dit, j'ai besoin d'avoir tous les paramètres réunis pour adapter la syntaxe à chaque cas...
        0
      2. CYG > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
         
        même sans ;q le fichier est vide. je vous ai envoyé le fichier <interferogram.out> le lien est : http://cjoint.com/?ebkgujGrFg

        merci d avance

        CYG
        0
  9. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Normalement ça devrait marcher cette fois-ci...
    find . -name "interferogram.out" -exec sed -n '388,/of pixels/{ /of lines\|of pixels/{s/.*\s//p}}' {} \; | sed 'N;s/\n/ * /' | bc >> tmp.txt
    ;-))
    0
    1. CYG
       
      merci bcp ça marche nikel, juste une tte petite question , j ai deux fichiers <liste_orb_Couples.txt> et l autre <tmp.txt>, ce que je veux c est de rassembler les les données des deux fichiers dans un autre fichier:

      par exemple:
      un extrait du <tmp.txt>
      1642572
      1542878
      1875242


      un extrait du <liste_orb_Couples.txt>

      19920505_19961201
      19930417_19990813
      19990712_20010215


      le résultat voulu dans un autre fichier <com.txt>

      d:\projet_interferométrie\lescouples\selection\19920505_19961201 lonlatpha.ascii.utm 1642572
      d:\projet_interferométrie\lescouples\selection\19930417_19990813 lonlatpha.ascii.utm 1542878
      d:\projet_interferométrie\lescouples\selection\19990712_20010215 lonlatpha.ascii.utm 1875242

      j ai essayé avec la commande gawk mais ça marche pas

      voici ma commande

      gawk '{print "d:\projet_interferométrie\lescouples\selection\"$0" lonlatpha.ascii.utm "$1"\n"}' liste_orb_Couples.txt tmp.txt > com.txt

      vous avez une idée??

      merci d avance

      CYG
      0
  10. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    paste -d " " liste_orb_Couples.txt tmp.txt
    ;-))
    0
    1. mecool23 Messages postés 6 Statut Membre
       
      merci bcp jipicy ;)
      0