Extraire une chaine et indiquer le nom du rép

Résolu
mecool23 Messages postés 6 Statut Membre -  
mecool23 Messages postés 6 Statut Membre -
Bonjour,
a la suite du sujet "extraire une chaine de caractére", j ai rencontré un autre probléme celui du chemin, dans lle fichier résultant <tmp.txt> j ai besoin de savoir la source de chaque chaîne
__sous répertoire 1
| |__interferogram.out
|__sous répértoire 2
| |__interferogram.out
|__sous répértoire 3
| |__interferogram.out
|__sous répértoire 4
| |__interferogram.out
|__tmp.txt

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

le nom du sous répertoire 1 16534673
le nom du sous répértoire 2 12345679
le nom du sous répértoire 3 14567865
le nom du sous répértoire 4 17654379

merci d avance
Configuration: Windows 2003
Firefox 2.0.0.9

3 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Un exemple à adapter :
    $ tree
    .
    `-- repertoire1
        |-- interferogram1.out
        `-- sous_repertoire2
            |-- interferogram2.out
            `-- sous_repertoire3
                |-- interferogram3.out
                `-- sous_repertoire4
                    `-- interferogram4.out
    
    4 directories, 4 files
    
    $ find . -name "interferogram?.out" -exec dirname {} \; -exec basename {} \; | sed 'N;s#\./#Répertoire : #;s/\n/    Fichier : /'
    Répertoire : repertoire1    Fichier : interferogram1.out
    Répertoire : repertoire1/sous_repertoire2    Fichier : interferogram2.out
    Répertoire : repertoire1/sous_repertoire2/sous_repertoire3    Fichier : interferogram3.out
    Répertoire : repertoire1/sous_repertoire2/sous_repertoire3/sous_repertoire4    Fichier : interferogram4.out
    
    [jp@MDK-2008 cyg]$
    ;-))
    0
    1. mecool23 Messages postés 6 Statut Membre
       
      la commande ci_dessus extrai de chaque fichier <interferogram.out> la chaine que je veux et elle met la chaine dans un fichier <tmp.txt>
      find . -name "interferogram.out" -exec sed -n '388,/of pixels/{ /of lines\|of pixels/{s/.*\s//p}}' {} \; | sed 'N;s/\n/ * /' | bc >> tmp.txt

      _19920505_20010527(le nom du dossier)
      | |__interferogram.out
      |__19930417_19960813
      | |__interferogram.out
      |__19990714_20010405
      | |__interferogram.out
      |__20020719_20060718
      | |__interferogram.out
      |__tmp.txt

      mais ce que je veux bien, c est d'indiquer le nom du dossier qui contient le fichier <interferogram.out> et à côté la chaîne extraite

      le résultat recherché (extrait du fichier tmp.txt)

      19920505_20010527(le nom du dossier) 1658241(la chaîne extraite du fichier <interferogram.out>)
      19930417_19960813 1524187
      19990714_20010405 1427186
      20020719_20060718 1714258


      merci d avance
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    J'avais bien compris ,mais ce n'est pas si simple que ça, à cause des pipes entre autre ;-((

    Mais bon...
    find . -name "interferogram.out" -exec bash -c 'rep=$(basename ${1}); result=$(sed -n "388,/of pixels/{ /of lines\|of pixels/{s/.*\s//p}}" ${1} | sed "N;s/\n/ * /" | bc); echo "${rep/.\//} ${result}"' - {} \; >> tmp.txt
    ;-))
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    J'avais bien compris ,mais ce n'est pas si simple que ça, à cause des pipes entre autre ;-((

    Mais bon...
    find . -name "interferogram.out" -exec bash -c 'rep=$(dirname ${1}); result=$(sed -n "388,/of pixels/{ /of lines\|of pixels/{s/.*\s//p}}" ${1} | sed "N;s/\n/ * /" | bc); echo "${rep##*/} ${result}"' - {} \; >> tmp.txt
    ;-))
    0
    1. mecool23 Messages postés 6 Statut Membre
       
      bonjour,

      j'ai cru que j ai pas bien expliqué,désolé:$. la commande est impec, c est ce que je veux, merci bcp jipicy;

      CYG
      0