Partage
  • Partager sur Facebook
  • Partager sur Twitter

Script extraire des données de fichiers texte

    4 février 2016 à 11:27:30

    Bonjour à tous,

    J'ai une nouvelle fois besoin de votre aide pour extraire des données de plusieurs fichiers texte.

    En gros j'ai plusieurs fichiers dans un repertoire

    Ces fichiers sont nommés comme ceci:

    • mg.D.1024.64.result
    • cg.D.64.4.result
    • ft.D.1024.64.result

    Voici un exemple du contenu du fichier ft.D.1024.64.result

     NAS Parallel Benchmarks 3.3 -- FT Benchmark
    
     No input file inputft.data. Using compiled defaults
     Size                : 2048x1024x1024
     Iterations          :             25
     Number of processes :           1024
     Processor array     :         1x1024
     WARNING: compiled for   512 processes.  Will not verify. 
     Layout type         :             1D
     T =    1     Checksum =    1.279002430965D+02    1.278880453657D+02
     T =    2     Checksum =    1.280940707399D+02    1.281097122531D+02
     T =    3     Checksum =    1.281301185062D+02    1.282272804158D+02
     T =    4     Checksum =    1.281335376918D+02    1.282847220750D+02
     T =    5     Checksum =    1.281289619071D+02    1.283170347976D+02
     T =    6     Checksum =    1.281227376938D+02    1.283374520801D+02
     T =    7     Checksum =    1.281167530127D+02    1.283512792581D+02
     T =    8     Checksum =    1.281115737457D+02    1.283609902227D+02
     T =    9     Checksum =    1.281073084284D+02    1.283679291277D+02
     T =   10     Checksum =    1.281038981190D+02    1.283729161180D+02
     T =   11     Checksum =    1.281012287559D+02    1.283764908911D+02
     T =   12     Checksum =    1.280991774362D+02    1.283790256286D+02
     T =   13     Checksum =    1.280976308885D+02    1.283807847723D+02
     T =   14     Checksum =    1.280964916323D+02    1.283819601136D+02
     T =   15     Checksum =    1.280956787287D+02    1.283826929288D+02
     T =   16     Checksum =    1.280951263231D+02    1.283830886162D+02
     T =   17     Checksum =    1.280947814659D+02    1.283832266787D+02
     T =   18     Checksum =    1.280946018736D+02    1.283831676769D+02
     T =   19     Checksum =    1.280945539045D+02    1.283829581472D+02
     T =   20     Checksum =    1.280946108337D+02    1.283826341260D+02
     T =   21     Checksum =    1.280947514317D+02    1.283822237023D+02
     T =   22     Checksum =    1.280949588164D+02    1.283817488887D+02
     T =   23     Checksum =    1.280952195364D+02    1.283812270054D+02
     T =   24     Checksum =    1.280955228450D+02    1.283806717175D+02
     T =   25     Checksum =    1.280958601286D+02    1.283800938199D+02
     Result verification failed
     class = D
    
    
     FT Benchmark Completed.
     Class           =                        D
     Size            =           2048x1024x1024
     Iterations      =                       25
     Time in seconds =                    18.97
     Total processes =                     1024
     Compiled procs  =                      512
     Mop/s total     =                472406.53
     Mop/s/process   =                   461.33
     Operation type  =           floating point
     Verification    =             UNSUCCESSFUL
     Version         =                      3.3
     Compile date    =              02 Feb 2016
    
     Compile options:
        MPIF77       = /sw/sdev/Modules/intelcomp/16.0.1/compilers...
        FLINK        = $(MPIF77)
        FMPI_LIB     = -L/sw/sdev/Modules/intelcomp/16.0.1/compile...
        FMPI_INC     = -I/sw/sdev/Modules/intelcomp/16.0.1/compile...
        FFLAGS       = -O3 -mcmodel=medium -fno-range-check -lm
        FLINKFLAGS   = -O3 -mcmodel=medium -fno-range-check -lm
        RAND         = randi8
    
    
     Please send the results of this run to:
    
     NPB Development Team 
     Internet: npb@nas.nasa.gov
     
     If email is not available, send this to:
    
     MS T27A-1
     NASA Ames Research Center
     Moffett Field, CA  94035-1000
    
     Fax: 650-604-3957
    

    Et voici le contenu du fichier mg.D.1024.64.result

     NAS Parallel Benchmarks 3.3 -- MG Benchmark
    
     No input file. Using compiled defaults 
     Size: 1024x1024x1024  (class D)
     Iterations:   50
     Number of processes:   1024
    
     Initialization time:           0.788 seconds
    
      iter    1
      iter    5
      iter   10
      iter   15
      iter   20
      iter   25
      iter   30
      iter   35
      iter   40
      iter   45
      iter   50
    
     Benchmark completed 
     VERIFICATION SUCCESSFUL 
     L2 Norm is  0.1583275060430E-09
     Error is    0.6469715637355E-11
    
    
     MG Benchmark Completed.
     Class           =                        D
     Size            =           1024x1024x1024
     Iterations      =                       50
     Time in seconds =                     2.13
     Total processes =                     1024
     Compiled procs  =                     1024
     Mop/s total     =               1460691.54
     Mop/s/process   =                  1426.46
     Operation type  =           floating point
     Verification    =               SUCCESSFUL
     Version         =                      3.3
     Compile date    =              02 Feb 2016
    
     Compile options:
        MPIF77       = /sw/sdev/Modules/intelcomp/16.0.1/compilers...
        FLINK        = $(MPIF77)
        FMPI_LIB     = -L/sw/sdev/Modules/intelcomp/16.0.1/compile...
        FMPI_INC     = -I/sw/sdev/Modules/intelcomp/16.0.1/compile...
        FFLAGS       = -O3 -mcmodel=medium -fno-range-check -lm
        FLINKFLAGS   = -O3 -mcmodel=medium -fno-range-check -lm
        RAND         = randi8
    
    
     Please send the results of this run to:
    
     NPB Development Team 
     Internet: npb@nas.nasa.gov
     
     If email is not available, send this to:
    
     MS T27A-1
     NASA Ames Research Center
     Moffett Field, CA  94035-1000
    
     Fax: 650-604-3957
    
    

    Ce que je voudrais c'est extraire des valeurs afin de generer un fichier CSV (comma separated value) donnant un tableau du genre:

    <nom du programme> <class> <total processes> <time> <MOP/s>
    
    <nom du programme 2> <class> <total processes> <time> <MOP/S>

    etc.

    Par exemple avec les deux fichiers ci-dessus on obtiendrait

    Program;Class;Processes;Time;MOP/s;
    MG;D;1024;2.13;1460691.54;
    
    FT;D;1024;18.97;472406.53;


    Je vous remercie par avance pour votre aide :)



    • Partager sur Facebook
    • Partager sur Twitter

    Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

      4 février 2016 à 15:32:51

      salut,

      il va falloir que tu te penche sérieusement sur les regex.

      pour les données, ce sera la même, donc tu pourras les grouper.

      pour récupérer le nom du programme de test, elle sera distincte.

      je vois bien sed faire ça facilement (ce qui ne veut pas dire que ce sera facile pour toi :P).

      PS: l'en-tête (Prog;Class;Proc...) est impératif ?

      • Partager sur Facebook
      • Partager sur Twitter

      Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

        4 février 2016 à 15:55:13

        Non l'entete n'est pas imperatif.

        Et oui, en effet, je confirme, les regex manquent cruellement à mes compétences.

        Cela dit, j'avoue que même si c'est mal...je veux bien un coup de main pour ce script la, car celui-ci va me permettre d'industrialiser considerablement ma collecte de resultats :)

        (Pour être honnête j'ai appris plusieurs fois  les regex...mais c'est le genre de choses qu'il faut que je re-apprenne à chaque fois...probablement parce que j'ai pas trouvé le bon tuto et pas le bon cas d'application..enfin bref...tout ca pour dire que je reconnais pleinement mon manque d'effort sur l'apprentissage des regex :) )

        Donc en gros je dans la position du mendiant qui tend la main, avec la larme à l'oeil et qui dit "Hé mec t'aurais pas un petit script regex pour m'aider à faire de la recherche en informatique haute performance?" (notez au passage qu'il s'agit là d'un mendiant-chercheur, une espèce en voie d'apparition...)

        • Partager sur Facebook
        • Partager sur Twitter

        Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

          4 février 2016 à 16:55:25

          c'est parti :
          $ sed -n '/Benchmark Completed\.$/p;/^\(Class\|Time\|Total\|Mop\/s total\)/p' mg.D.1024.64.result 
          MG Benchmark Completed.
          Class           =                        D
          Time in seconds =                     2.13
          Total processes =                     1024
          Mop/s total     =               1460691.54

          $ sed -n '/Benchmark Completed\.$/s/\([^[:blank:]]*\)[[:blank:]].*/\1/p;/^\(Class\|Time\|Total\|Mop\/s total\)/s/.*[[:blank:]]\(.*\)/\1/p' mg.D.1024.64.result 
          MG
          D
          2.13
          1024
          1460691.54
          $ sed -n '/Benchmark Completed\.$/{s/\([^[:blank:]]*\)[[:blank:]].*/\1/;h};/^\(Class\|Time\|Total\|Mop\/s total\)/{s/.*[[:blank:]]\(.*\)/\1/;H};${x;s/\n/;/gp}' mg.D.1024.64.result 
          MG;D;2.13;1024;1460691.54


          pour les explications, regarde d'abord la page man de sed, et si tu conserves un doute, n'hésites pas à nous en faire part.

          -
          Edité par dantonq 4 février 2016 à 16:56:10

          • Partager sur Facebook
          • Partager sur Twitter

          Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

            4 février 2016 à 18:01:19

            oh, et le coup de grâce (parce que certaines valeurs doivent être inversées) :
            $ sed -n '/Benchmark Completed\.$/{ \
               s/\([^[:blank:]]*\)[[:blank:]].*/\1/;
               h;
            };
            /^\(Class\|Time\|Total\|Mop\/s total\)/{ \
               s/.*[[:blank:]]\(.*\)/\1/;
               H;
            };
            ${ \
               x;
               s/\n/;/g;
               s/\(\([^;]*;\)\{2\}\)\([^;]*;\)\([^;]*;\)\(.*\)/\1\4\3\5/p
            }' mg.D.1024.64.result 
            MG;D;1024;2.13;1460691.54

            ben, ouais ! tout ça pour ça. o_O
            • Partager sur Facebook
            • Partager sur Twitter

            Validez la réponse utile « Un problème clairement exposé est à moitié résolu. » Pas de MP technique

              4 février 2016 à 21:25:07

              Bon ben je vais tester tout ca !

              Je te remercie a nouveau!

              • Partager sur Facebook
              • Partager sur Twitter

              Si y'a pas d'accents dans mes messages c'est parce que je suis sur un clavier norvegien :)

              Script extraire des données de fichiers texte

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown