IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Utilisation de grep non orthodoxe ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut Utilisation de grep non orthodoxe ?
    Bonjour, Actuellement je fais un petit script pour ne pas m'embeter a faire l'analyse a la main sur 13000 fichiers ( ca se comprend )

    Le principe est assez simple, pour l'instant je regarde le temps de calcul de chaque simulation que je veux optimiser pour obtenir un temps de calcul plus ou moins equivalant.

    Le script que j'ai cree est le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    #!/bin/sh
     
    OTP=/scratch/theoric2/werner/public/outp
    REP1=/users/theoric/sophys/EPOS/Check/gg2mw24a
    REP2=/users/theoric/sophys/EPOS/Check/gg2mw24b
     
    NMF=12782
     
    ###################################################################
     
                           #files in gg2mw24a
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24a ]; then cd $CHK ; mkdir gg2mw24a; fi
     
    cd $OTP/gg2mw24a/1
     
    echo "##########################################################################" > $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "                               file gg2mw24a/1                            " >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "" >> $REP1/users_time.txt
     
    for i in `seq 1 10000`; do
      if [ -f $OTP/gg2mw24a/1/z-gg2mw24a-$i.oxx ]; then
        echo "$i,`grep user z-gg2mw24a-$i.oxx` " >> $REP1/users_time.txt
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP1/users_time.txt
        fi
      else
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP1/users_time.txt
        fi
      fi
    done
     
     
    cd $OTP/gg2mw24a/2
     
    echo "" >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "                               file gg2mw24a/2                            " >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "##########################################################################" >> $REP1/users_time.txt
    echo "" >> $REP1/users_time.txt
     
    for i in `seq 10000 $NMF`; do
      if [ -f $OTP/gg2mw24a/2/z-gg2mw24a-$i.oxx ]; then
        echo "$i,`grep user z-gg2mw24a-$i.oxx` " >> $REP1/users_time.txt
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP1/users_time.txt
        fi
      else
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP1/users_time.txt
        fi
      fi
    done
     
    ###############################################################
     
                        #files in gg2mw24b
     
    ###############################################################
     
    if [ ! -d $CHK/gg2mw24b ]; then cd $CHK ; mkdir gg2mw24b; fi
     
    cd $OTP/gg2mw24b/1
     
    echo "##########################################################################" > $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "                               file gg2mw24b/1                            " >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "" >> $REP2/users_time.txt
     
    for i in `seq 1 10000`; do
      if [ -f $OTP/gg2mw24b/1/z-gg2mw24b-$i.oxx ]; then
        echo "$i,`grep user z-gg2mw24b-$i.oxx` " >> $REP2/users_time.txt
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP2/users_time.txt
        fi
      else
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP2/users_time.txt
        fi
      fi
    done
     
    cd $OTP/gg2mw24b/2
     
    echo "" >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "                               file gg2mw24b/2                            " >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "##########################################################################" >> $REP2/users_time.txt
    echo "" >> $REP2/users_time.txt
     
    for i in `seq 10000 $NMF`; do
      if [ -f $OTP/gg2mw24b/2/z-gg2mw24b-$i.oxx ]; then
        echo "$i,`grep user z-gg2mw24b-$i.oxx` " >> $REP2/users_time.txt
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP2/users_time.txt
        fi
      else
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " " >> $REP2/users_time.txt
        fi
      fi
    done
     
    echo " Job Finished "
    Donc la j'ai la chose que je recherche a la base, donc mes temps de calculs qui sont sur la meme ligne que user (grep user blabla)

    Mais maintenant tout se complique, j'aimerais prendre les nombres juste apres le user (dans chaque fichier) et les divise par un autre nombre qui est le premier des temps de user.

    En gros ce que j'aimerais faire est de faire un grep qui pourrait me permettre de prendre ce qu'il y a sur la ligne APRES ce que j'ai mis dans grep.

    J'ai recherche pendant une petite heure sur la toile et rien ne m'est apparu ...

    Help ????

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Bonjour,


    ¿ un petit exemple, pour qu'on se fasse une image du truc, stp ?

    les données que tu veux sont déjà extraites dans le fichier users_time.txt, non ?

    pourquoi faire une boucle jusquà 10000 ? tu ne veux traîter que les 10000 premiers fichiers de chaque répertoire ?
    s'il y en a plus ? s'il y en a moins ???

    c'est quoi $CHK ? et $MTH ?


    ps:
    les noms de variables tout en majuscules sont, par convention, réservés aux variables d'environnement.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    J'ai recherche pendant une petite heure sur la toile et rien ne m'est apparu ...
    Rien ne t'est apparu car quand on cherche à transformer un fichier texte en un autre fichier texte, on ne fait pas un script long et douloureux.
    On écrit un script awk.

    Donc, pour ton grep sur la ligne suivante, la réponse est probablement awk.

    Mais comme ta question n'est pas compréhensible, on ne peut pas dire plus.

    Peux-tu donner un exemple d'entrée et de sortie attendue ?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    J'ai des variables MTH et CHK qui sont des répertoires de mon .cshrc
    Le code que j'ai actuellement fonctionne parfaitement et fait ce que je demande, c'est pour faire une chose en plus que je pose la question

    Donc ce que je fais :

    Je vais dans un répertoire où il y a 10 000 fichiers, je veux prendre que le temps qui est une seule ligne pour chaque fichier et les comparer les uns avec les autres sachant qu'il y a une histoire que certaines simus ne se font pas etc et j'ai besoin de paquet de mod 20, je m'explique, je fais 13 000 simus du fichier gg2mw24a(b ou c) et on me ressort les fichiers de sortie.

    Je répète, il n'y a que 10 000 fichiers, je suis sur que j'aurais pu faire un truc du style 'grep user *' mqis si je faisais ça je perdais mes opérations de modulo et mes echo en paquet que je recherche (voir plus tard).

    Dans ceux de sortie on cherche à optimiser le temps et pour cela on utilise quelques facteurs qui n'ont rien à voir avec cela. Pour ne pas regarder tous les fichiers indépendamment et noter le temps, je fais ce script.

    Alors j'ai quatre grands répertoires :

    /scratch/.../gg2mw24a/1 où il y a les fichiers de sorties pour les simus 1 à 10 000 pour le fichier gg2mw24a
    /scratch/.../gg2mw24a/2 où il y a les fichiers de sorties pour les simus 1 à 10 000 pour le fichier gg2mw24a

    /scratch/.../gg2mw24b/1 où il y a les fichiers de sorties pour les simus 1 à 10 000 pour le fichier gg2mw24b
    /scratch/.../gg2mw24b/2 où il y a les fichiers de sorties pour les simus 10 000 à NMF pour le fichier gg2mw24b

    Donc j'ai fais mon modulo, patati, j'ai fais la condition d'avoir le dossier qui existe bien, blablabla et là j'ai les résultats que je veux sur mon fichier de sortie : par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    ##########################################################################
    ##########################################################################
                                   file gg2mw24b/1
    ##########################################################################
    ##########################################################################
     
    1,user    476m54.551s
    2,user    365m54.391s
    3,user    795m33.434s
    4,user    744m50.127s
    5,user    713m49.819s
    6,user    648m15.075s
    7,user    1336m8.336s
    8,user    1153m3.206s
    9,user    1120m38.669s
    10,user    874m49.472s
    11,user    672m2.152s
    12,user    533m46.806s
    13,user    402m31.044s
    14,user    355m49.103s
    15,user    433m14.921s
    16,user    278m43.607s
    17,user    229m14.729s
    18,user    98m28.653s
    19,user    24m59.300s
    20,user    29m29.816s
     
    21,user    473m27.105s
    22,user    426m51.394s
     
    41,user    456m11.234s
    42,user    417m8.150s
    44,user    764m41.957s
    45,user    697m8.228s
    46,user    667m48.883s
     
    61,user    460m4.758s
    62,user    359m27.460s
     
    81,user    440m15.369s
    82,user    431m7.210s
    83,user    746m24.226s
    84,user    693m6.313s
    85,user    572m25.106s
    86,user    652m27.151s
    87,user    1241m59.123s
    88,user    942m26.689s
    89,user    813m28.660s
    90,user    930m28.494s
    91,user    612m53.922s
    92,user    441m47.159s
    93,user    399m26.484s
    94,user    281m15.800s
     
    101,user    436m53.850s
    102,user    417m34.804s
     
    121,user    405m14.221s
    122,user    398m49.097s
    123,user    808m45.364s
    124,user    758m24.347s
    125,user    635m4.288s
    126,user    651m2.038s
     
    141,user    427m10.846s
    142,user    398m54.005s
     
    161,user    394m31.727s
    162,user    419m54.167s
    163,user    800m30.880s
    164,user    741m45.803s
    165,user    698m30.307s
    166,user    638m31.360s
    167,user    1112m40.051s
    168,user    1108m25.257s
    169,user    979m58.741s
    170,user    935m38.844s
    171,user    723m32.167s
    172,user    552m43.717s
    173,user    440m28.984s
    174,user    382m22.654s
    175,user    466m42.142s
    176,user    232m33.535s
    177,user    60m19.799s
    178,user    58m7.907s
    179,user    49m9.965s
    180,user    2m42.144s
     
    181,user    457m23.835s
    182,user    416m50.047s
     
    201,user    516m13.047s
    202,user    430m0.668s
    203,user    791m37.486s
    204,user    734m7.310s
    205,user    635m19.195s
    206,user    556m45.663s
     
    221,user    440m5.894s
    222,user    431m59.531s
     
    241,user    473m42.514s
    242,user    419m13.096s
    243,user    816m0.054s
    244,user    751m36.012s
    245,user    716m48.736s
    246,user    651m44.891s
    247,user    1267m54.298s
    248,user    914m3.733s
    249,user    1145m31.044s
    250,user    907m7.768s
    251,user    682m41.671s
    252,user    471m44.448s
    253,user    458m46.957s
    254,user    304m49.260s
     
    261,user    478m29.105s
    262,user    393m38.322s
     
    281,user    499m0.165s
    282,user    442m56.582s
    283,user    742m7.921s
    284,user    780m2.346s
    285,user    697m4.752s
    286,user    651m21.350s
     
    301,user    448m53.609s
    302,user    355m53.186s
     
    321,user    412m30.405s
    322,user    407m50.339s
    323,user    814m46.176s
    324,user    726m14.015s
    325,user    647m56.102s
    326,user    661m54.725s
    327,user    1255m31.822s
    328,user    993m31.424s
    329,user    859m34.905s
    330,user    766m52.151s
    331,user    772m49.869s
    332,user    488m17.461s
    333,user    408m22.829s
    334,user    265m7.666s
    335,user    459m6.180s
    336,user    230m46.553s
    337,user    170m39.047s
    338,user    82m56.983s
    339,user    45m37.606s
    340,user    3m25.669s
     
    341,user    455m13.810s
    342,user    395m42.572s
    à chaque fois j'ai le numéro du fichier, et la ligne où il y a user qui sont dans mes fichiers user_time.txt exactement.

    Tout cela fonctionne et j'ai ce qu'il faut, comme je veux, tout le monde est content.

    Maintenant je veux faire une moyenne et diviser les nombres et juste les nombres que j'ai trouvé avec le grep, mais avec le grep bah j'ai les caractères "user" etc ...

    Comment je peux faire pour n'avoir que les nombres derrière les "user" en utilisant grep ou autre chose ?

    Après j'aimerais bien faire des trucs du style :

    j pour le paquet suivant la dernière colonne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    281,user    499m0.165s    499m0.165s/499m0.165s
    282,user    442m56.582s  442m56.582s/499m0.165s
    283,user    742m7.921s   742m7.921s/499m0.165s
    284,user    780m2.346s
    285,user    697m4.752s
    286,user    651m21.350s
    Du coup là je prendrais que les minutes pour ne pas faire compliqué (si possible) parce qu'il reste toujours les caractères m et s ....

    Enfin faire vite fait un truc moyenné avec la valeur du premier paquet pour pouvoir voir la différence de temps sur TOUTE mes simulations.

    J'espère que vous pourrez mieux comprendre et du coup m'aider

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    comme cela a été dit, quand tu te dis : « je voudrais faire un grep ET après je voudrais faire autre chose avec ce qui a été récupéré »
    il faut passer à un vrai langage : awk, perl, python...

    gawk fonctionne bien avec les regex , peut opérer de nombreuses transformations et de nombreux calculs, et est facile à utiliser pourvu que ton algorithme soit clair.
    tu devrais pouvoir tout faire ± à la volée, sans nécessiter des fichiers temporaires.


    ps:
    J'ai des variables MTH et CHK qui sont des répertoires de mon .cshrc
    je ne compterais pas sur des variables exportées depuis mon .shellrc : tous mes scripts doivent pouvoir être exécutés de manière totalement indépendante, quel que soit le contexte d'exécution (autre utilisateur, cron, cgi...).
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Bonjour,

    Pas sur d'avoir tout compris, mais voila un résultat selon le fichier exemple que tu as donné que j'appelerais aaa.txt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    $ awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' aaa.txt
    ##########################################################################
    ##########################################################################
                                   file gg2mw24b/1
    ##########################################################################
    ##########################################################################
     
    1,user 476/476=>1
    2,user 365/476=>0.766807
    3,user 795/476=>1.67017
    4,user 744/476=>1.56303
    5,user 713/476=>1.4979
    6,user 648/476=>1.36134
    7,user 1336/476=>2.80672
    8,user 1153/476=>2.42227
    9,user 1120/476=>2.35294
    10,user 874/476=>1.83613
    11,user 672/476=>1.41176
    12,user 533/476=>1.11975
    13,user 402/476=>0.844538
    14,user 355/476=>0.745798
    15,user 433/476=>0.909664
    16,user 278/476=>0.584034
    17,user 229/476=>0.481092
    18,user 98/476=>0.205882
    19,user 24/476=>0.0504202
    20,user 29/476=>0.0609244
     
    21,user 473/473=>1
    22,user 426/473=>0.900634
     
    41,user 456/456=>1
    42,user 417/456=>0.914474
    44,user 764/456=>1.67544
    45,user 697/456=>1.52851
    46,user 667/456=>1.46272
     
    61,user 460/460=>1
    62,user 359/460=>0.780435
     
    81,user 440/440=>1
    82,user 431/440=>0.979545
    83,user 746/440=>1.69545
    84,user 693/440=>1.575
    85,user 572/440=>1.3
    86,user 652/440=>1.48182
    87,user 1241/440=>2.82045
    88,user 942/440=>2.14091
    89,user 813/440=>1.84773
    90,user 930/440=>2.11364
    91,user 612/440=>1.39091
    92,user 441/440=>1.00227
    93,user 399/440=>0.906818
    94,user 281/440=>0.638636
     
    101,user 436/436=>1
    102,user 417/436=>0.956422
     
    121,user 405/405=>1
    122,user 398/405=>0.982716
    123,user 808/405=>1.99506
    124,user 758/405=>1.8716
    125,user 635/405=>1.5679
    126,user 651/405=>1.60741
     
    141,user 427/427=>1
    142,user 398/427=>0.932084
     
    161,user 394/394=>1
    162,user 419/394=>1.06345
    163,user 800/394=>2.03046
    164,user 741/394=>1.88071
    165,user 698/394=>1.77157
    166,user 638/394=>1.61929
    167,user 1112/394=>2.82234
    168,user 1108/394=>2.81218
    169,user 979/394=>2.48477
    170,user 935/394=>2.3731
    171,user 723/394=>1.83503
    172,user 552/394=>1.40102
    173,user 440/394=>1.11675
    174,user 382/394=>0.969543
    175,user 466/394=>1.18274
    176,user 232/394=>0.588832
    177,user 60/394=>0.152284
    178,user 58/394=>0.147208
    179,user 49/394=>0.124365
    180,user 2/394=>0.00507614
     
    181,user 457/457=>1
    182,user 416/457=>0.910284
     
    201,user 516/516=>1
    202,user 430/516=>0.833333
    203,user 791/516=>1.53295
    204,user 734/516=>1.42248
    205,user 635/516=>1.23062
    206,user 556/516=>1.07752
     
    221,user 440/440=>1
    222,user 431/440=>0.979545
     
    241,user 473/473=>1
    242,user 419/473=>0.885835
    243,user 816/473=>1.72516
    244,user 751/473=>1.58774
    245,user 716/473=>1.51374
    246,user 651/473=>1.37632
    247,user 1267/473=>2.67865
    248,user 914/473=>1.93235
    249,user 1145/473=>2.42072
    250,user 907/473=>1.91755
    251,user 682/473=>1.44186
    252,user 471/473=>0.995772
    253,user 458/473=>0.968288
    254,user 304/473=>0.642706
     
    261,user 478/478=>1
    262,user 393/478=>0.822176
     
    281,user 499/499=>1
    282,user 442/499=>0.885772
    283,user 742/499=>1.48697
    284,user 780/499=>1.56313
    285,user 697/499=>1.39679
    286,user 651/499=>1.30461
     
    301,user 448/448=>1
    302,user 355/448=>0.792411
     
    321,user 412/412=>1
    322,user 407/412=>0.987864
    323,user 814/412=>1.97573
    324,user 726/412=>1.76214
    325,user 647/412=>1.57039
    326,user 661/412=>1.60437
    327,user 1255/412=>3.04612
    328,user 993/412=>2.41019
    329,user 859/412=>2.08495
    330,user 766/412=>1.85922
    331,user 772/412=>1.87379
    332,user 488/412=>1.18447
    333,user 408/412=>0.990291
    334,user 265/412=>0.643204
    335,user 459/412=>1.11408
    336,user 230/412=>0.558252
    337,user 170/412=>0.412621
    338,user 82/412=>0.199029
    339,user 45/412=>0.109223
    340,user 3/412=>0.00728155
     
    341,user 455/455=>1
    342,user 395/455=>0.868132
    Cordialement.

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  8. #8
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Bonjour,

    disedorgue c'est exactement ce que je recherche !

    Tu l'as fait comment ?

    En mettant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' aaa.txt
    Dans la boucle ou completement independamment ?

    Je vois a peu pres comment ca fonctionne mais pas de trop quand meme, je vais regarder ce que fais awk,

    Merci !

  9. #9
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Okay donc j'ai compris ou mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' aaa.txt
    Mais comment je peux faire pour ecrire ceci dans un autre fichier ?
    j'ai vu qu'il y avait un printf mais dans les exemple je vois des choses du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     awk '{ printf "%-10s %s\n", $1, $2 }' BBS-list
    mais la du coup ca imprime dans le fichier BBS-list ou ca utilise les valeur dans BBS-list pour imprimer autre part ( ou ?)

    Je verrais plus la premiere option mais j'ai essaye de refaire ca vite fais avec la commande plus haut mais pour l'instant c'est pas un franc succes.

    Sinon j'ai un peu mieux compris pour le awk donne mais je continue de regarder ca

    Okay donc je viens de voir que la syntaxe exacte serait plus :

    printf("La ligne est %s",$0) > "fichier.int" Redirection de la sortie vers un fichier avec >, on peut utiliser aussi la redirection >>. Veillez à ne pas oublier les "" autour du nom du fichier.

    Du coup je me suis fait un petit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' aaa.txt > "test.int"
    Et ca fonctionne

  10. #10
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Desole pour le triple post voila donc mon code final qui fonctionne et qui fait ce que je recherche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    #!/bin/sh
     
    OTP=/scratch/theoric2/werner/public/outp
    REP1=/users/theoric/sophys/EPOS/Check/gg2mw24a
    REP2=/users/theoric/sophys/EPOS/Check/gg2mw24b
    REP3=/users/theoric/sophys/EPOS/Check/gg2mw24c
     
    # Pour rappel, si besoin
     
    MTH=/users/theoric/sophys/1/bin/Mathkeep/
    CHK=/users/theoric/sophys/EPOS/Check
     
    NMF=12782
     
    analyze() {
     
    if [ $# -le 0 ]; then
        echo 
        echo "  analyse [chemin fichier a prendre donnee] [fichiers] [debut] [fin]  "
        echo
        echo "                        [repertoire de sortie]         "
        echo
        exit 1
    fi
      cd "$1"
     
      echo "##########################################################################"
      echo "##########################################################################"
      echo "         file $1                            "
      echo "##########################################################################"
      echo "##########################################################################"
      echo
     
      pathbase="$1/$2"
     
      for i in `seq $3 $4`; do
        if [ -f "$pathbase"-$i.oxx ]; then
          echo "$i,`grep user "$pathbase"-$i.oxx` "
        fi
        if [ `${MTH}mod $i 20` -eq 0 ]; then
          echo " "
        fi
      done
     
    cd "$5" 
     
    }
     
    { 
    analyze "$OTP/gg2mw24a/1/" z-gg2mw24a 1 10000 $REP1
    } > "$REP1/users_time.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt > "$REP1/First_analysis.txt"
     
    {
    analyze "$OTP/gg2mw24a/2/" z-gg2mw24a 10000 $NMF $REP1
    } > "$REP1/users_time2.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time2.txt >> "$REP1/First_analysis.txt"
     
    echo "job Finished 1"
     
    { 
    analyze "$OTP/gg2mw24b/1/" z-gg2mw24b 1 10000 $REP2
    } > "$REP2/users_time.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt > "$REP2/First_analysis.txt"
     
    { 
    analyze "$OTP/gg2mw24b/2/" z-gg2mw24b 10000 $NMF $REP2
    } > "$REP2/users_time2.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time2.txt >> "$REP2/First_analysis.txt"
     
    echo "Job finished 2"
     
    { 
    analyze "$OTP/gg2mw24c/1/" z-gg2mw24c 1 10000 $REP3
    } > "$REP3/users_time.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt > "$REP3/First_analysis.txt"
     
    { 
    analyze "$OTP/gg2mw24c/2/" z-gg2mw24c 10000 $NMF $REP3
    } > "$REP3/users_time2.txt"
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time2.txt >> "$REP3/First_analysis.txt"
     
    echo " Job Finished 3"
    J'ai remis les valeurs des variables CHK et MTH et voila le resultat de sortie de First analysis.txt est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    ##########################################################################
    ##########################################################################
             file /scratch/theoric2/werner/public/outp/gg2mw24c/1/                            
    ##########################################################################
    ##########################################################################
     
    1,user 450/450=>1
    2,user 369/450=>0.82
    3,user 332/450=>0.737778
    4,user 308/450=>0.684444
    5,user 275/450=>0.611111
    6,user 267/450=>0.593333
    7,user 537/450=>1.19333
    8,user 487/450=>1.08222
    9,user 493/450=>1.09556
    10,user 388/450=>0.862222
    11,user 321/450=>0.713333
    12,user 483/450=>1.07333
    13,user 420/450=>0.933333
    14,user 221/450=>0.491111
    15,user 476/450=>1.05778
    16,user 246/450=>0.546667
    17,user 163/450=>0.362222
    18,user 35/450=>0.0777778
    19,user 45/450=>0.1
    20,user 2/450=>0.00444444
     
    21,user 435/435=>1
    22,user 383/435=>0.88046
    23,user 356/435=>0.818391
    24,user 337/435=>0.774713
    25,user 262/435=>0.602299
    26,user 301/435=>0.691954
     
    41,user 428/428=>1
    42,user 380/428=>0.88785
    43,user 346/428=>0.808411
    44,user 314/428=>0.733645
    45,user 301/428=>0.703271
    46,user 273/428=>0.63785
    47,user 580/428=>1.35514
    48,user 466/428=>1.08879
    49,user 416/428=>0.971963
    50,user 284/428=>0.663551
    51,user 400/428=>0.934579
     
    61,user 382/382=>1
    62,user 391/382=>1.02356
    63,user 330/382=>0.863874
    64,user 309/382=>0.808901
    65,user 298/382=>0.780105
    66,user 270/382=>0.706806
    Merci beaucoup pour l'aide !

    Une derniere question : comment je peux afficher le temps d'execution de mon job ? de la facon suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    real 0m0.067s
    user 0m0.010s
    sys 0m0.000s
    J'ai vu quelques chose du type time -o command mais je ne sais pas si c'est ce que je recherche et comment l'utiliser si je fais time -o Verif_time (nom de mon script) ca va pas vraiment faire ce que je veux si ? Car je souhaite que ce soit toujours affiche en echo "" sur le terminal dans mon script en lui-meme

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Une simplification rapide qui devrait fonctionner, c'est de n'utiliser qu'un seul awk pour tes 2 fichiers, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt users_time2.txt > "$REP1/First_analysis.txt"
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt > "$REP1/First_analysis.txt"
    ...
    ...
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time2.txt >> "$REP1/First_analysis.txt"
    Sinon, une réécriture en awk de la partie grep pourrait permettre de coupler les 2 commandes...
    Cordialement.

  12. #12
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    C'est ce que j'ai fais et ca fonctionne, pour le :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    awk 'FNR < 7 || /^ *$/ {X=0;print;next};X == 0 { Y=$2 ;sub(/m.*/,"",Y) ; X=1}{sub(/m.*/,"",$2);print $1,$2"/"Y"=>"$2/Y}' users_time.txt users_time2.txt > "$REP1/First_analysis.txt"
    J'en arrive a ma deuxieme analyse, j'aimerais maintenant prendre le fichier first analyse ( un bout en exemple plus bas) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    1,user 450/450=>1
    2,user 369/450=>0.82
    3,user 332/450=>0.737778
    4,user 308/450=>0.684444
    5,user 275/450=>0.611111
    6,user 267/450=>0.593333
    7,user 537/450=>1.19333
    8,user 487/450=>1.08222
    9,user 493/450=>1.09556
    10,user 388/450=>0.862222
    11,user 321/450=>0.713333
    12,user 483/450=>1.07333
    13,user 420/450=>0.933333
    14,user 221/450=>0.491111
    15,user 476/450=>1.05778
    16,user 246/450=>0.546667
    17,user 163/450=>0.362222
    18,user 35/450=>0.0777778
    19,user 45/450=>0.1
    20,user 2/450=>0.00444444
     
    21,user 435/435=>1
    22,user 383/435=>0.88046
    23,user 356/435=>0.818391
    24,user 337/435=>0.774713
    25,user 262/435=>0.602299
    26,user 301/435=>0.691954
     
    41,user 428/428=>1
    42,user 380/428=>0.88785
    43,user 346/428=>0.808411
    44,user 314/428=>0.733645
    45,user 301/428=>0.703271
    46,user 273/428=>0.63785
    47,user 580/428=>1.35514
    48,user 466/428=>1.08879
    49,user 416/428=>0.971963
    50,user 284/428=>0.663551
    51,user 400/428=>0.934579
     
    61,user 382/382=>1
    62,user 391/382=>1.02356
    63,user 330/382=>0.863874
    64,user 309/382=>0.808901
    65,user 298/382=>0.780105
    66,user 270/382=>0.706806
    Et maintenant j'aimerais faire une moyenne sur tout les nombres modulo 20.

    Par exemple ici :

    Je veux faire la moyenne par exemple sur les mod 20 = 2 (sachant que je veux le faire au final pour tout les nombres mod 20 pour avoir au final que 20 valeur dans le fichier que j'appellerai second analyse)

    J'aurai :

    1 ....
    2 (0.82+0.88046+0.88785+1.02356)/4 = 0.9029675
    3 ....
    4 .....
    5 ...
    6 ....

    Ce que je veux d'afficher c'est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    1     1
    2     0.9029675
    etc ...
    Le problème c'est qu'on a pas le meme nombre de simulation de mod 20 = 1 que de mod 20 = 0 (par exemple).

    J'imagine faire quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Pour p allant de 1 a 20
      Si la ligne mod 20 = p existe
        somme sur nombre precedant
        k=k+1
      end
    end
     
    Truc= somme/k
    Donc je me confronte a deux problemes :
    - ne prendre que les nombres apres => dans first analysis
    - faire la somme je ne sais pas trop comment ...

    J'espere que j'ai reussi a me faire comprendre ...

    Alors ce que j'ai comme idee :

    Je fais l'algo suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for i in `seq 1 $NMF`; do
       j = $i mod 20
      if [ ligne commencant par $i existe ]; then
        k$j=k$j+val
        l$j=l$j+1
      fi
    done
     
    for m in `seq 1 20`; do
      echo " $m,      ,k$j/l$j \n "
      j=j+1
    done
    Et donc la commande que je ferais pour :

    if [ ligne commencant par $i existe ]; then

    serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grep  '^[$i]' First_analysis.txt
    Le probleme c'est qu'avec ca il prendra aussi les lignes commencant par 11 12 13 etc ... non ? (si $i = 1)

    Et val est la valeur apres le => dans First...., ca par contre je ne vois pas comment prendre strictement ces valeurs ???? :S

    Merci beaucoup pour ce qui a deja ete fait !

  13. #13
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Beaucoup de choses à dire:

    • Les commandes ont une entrée standard et un sortie standard, qui sont considérées comme des fichiers textes plats.
      On peut les emboîter par un pipe '|' afin que la sortie de l'un soit l'entrée de l'autre.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      commande | awk 'script'
    • Un résultat de groupe de commandes peut être récupéré comme si c'était une la sortie standard d'une commande.
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      {
      while [ $i -ne 5 ]
      do
          echo $i;
          let i=i+1
      done
      echo "tata" 
      } | awk '{print "toto"$0;}'
      Dans ce cas le "echo" n'écrit rien à l'écran !
    • Pourquoi faire un fichier de sortie avec des séparateurs hétérogènes ? Dans la suite, je prends la virgule comme séparateur. Et modifie ton fichier.
    • Pour faire des moyennes, le conseil est d'utiliser les tableaux de awk. Très puissant:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      22
      23
      24
      25
      26
      27
      28
      29
      30
      31
      32
      33
      34
      35
      36
      37
      38
      39
      40
      41
      42
      43
      44
      45
      46
      47
      $ cat moyvirgule.txt 
      1,user 450/450,1
      2,user 369/450,0.82
      3,user 332/450,0.737778
      4,user 308/450,0.684444
      5,user 275/450,0.611111
      6,user 267/450,0.593333
      7,user 537/450,1.19333
      8,user 487/450,1.08222
      9,user 493/450,1.09556
      10,user 388/450,0.862222
      11,user 321/450,0.713333
      12,user 483/450,1.07333
      13,user 420/450,0.933333
      14,user 221/450,0.491111
      15,user 476/450,1.05778
      16,user 246/450,0.546667
      17,user 163/450,0.362222
      18,user 35/450,0.0777778
      19,user 45/450,0.1
      20,user 2/450,0.00444444
       
      21,user 435/435,1
      22,user 383/435,0.88046
      23,user 356/435,0.818391
      24,user 337/435,0.774713
      25,user 262/435,0.602299
      26,user 301/435,0.691954
       
      41,user 428/428,1
      42,user 380/428,0.88785
      43,user 346/428,0.808411
      44,user 314/428,0.733645
      45,user 301/428,0.703271
      46,user 273/428,0.63785
      47,user 580/428,1.35514
      48,user 466/428,1.08879
      49,user 416/428,0.971963
      50,user 284/428,0.663551
      51,user 400/428,0.934579
       
      61,user 382/382,1
      62,user 391/382,1.02356
      63,user 330/382,0.863874
      64,user 309/382,0.808901
      65,user 298/382,0.780105
      66,user 270/382,0.706806
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      $ awk -F',' '($3!=""){sum[$1%20]+=$3;nb[$1%20]++;} END{for (i in nb) print i,sum[i]/nb[i];}' moyvirgule.txt                                                                                          
      17 0.362222
      4 0.750426
      18 0.0777778
      5 0.674197
      19 0.1
      6 0.657486
      7 1.27424
      8 1.0855
      9 1.03376
      10 0.762887
      11 0.823956
      12 1.07333
      0 0.00444444
      13 0.933333
      14 0.491111
      1 1
      15 1.05778
      2 0.902967
      16 0.546667
      3 0.807114
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      21
      $ awk -F',' '($3!=""){sum[$1%20]+=$3;nb[$1%20]++;} END{for (i in nb) print i,sum[i]/nb[i];}' moyvirgule.txt |sort -n -k1                                                                             
      0 0.00444444
      1 1
      2 0.902967
      3 0.807114
      4 0.750426
      5 0.674197
      6 0.657486
      7 1.27424
      8 1.0855
      9 1.03376
      10 0.762887
      11 0.823956
      12 1.07333
      13 0.933333
      14 0.491111
      15 1.05778
      16 0.546667
      17 0.362222
      18 0.0777778
      19 0.1
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  14. #14
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    C'est exactement ce que je voulais.

    Je comprend un peu mieux comment awk fonctionne.

    Je vais me prendre un ou deux tuto pour le net, je pense que ca pourrait m'aider.

    Le pipe fait juste en sorte que la sortie de l'un soit l'entree de l'autre ?

    $1%20 donc ca c'est le modulo ?

    Avant de mettre resolu, je pense que c'est a peu pres le meme sujet.

    Maintenant je veux verifer un autre truc sur un autre fichier.

    J'ai un autre script (que je vais rendre plus propre juste apres ce message mais qui fera la meme chose)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    #!/bin/sh
     
    MTR1a=/scratch/theoric2/werner/public/outp/gg2mw24a/1
    MTR1b=/scratch/theoric2/werner/public/outp/gg2mw24b/1
    MTR2a=/scratch/theoric2/werner/public/outp/gg2mw24a/2
    MTR2b=/scratch/theoric2/werner/public/outp/gg2mw24b/2
    MTR1c=/scratch/theoric2/werner/public/outp/gg2mw24c/2
    MTR2c=/scratch/theoric2/werner/public/outp/gg2mw24c/2
     
    REP1=/users/theoric/sophys/EPOS/Check/gg2mw24a
    REP2=/users/theoric/sophys/EPOS/Check/gg2mw24b
    REP3=/users/theoric/sophys/EPOS/Check/gg2mw24c
     
    NMF=12786
     
    ###################################################################
     
                           #files in gg2mw24a/1
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24a ]; then cd $CHK ; mkdir gg2mw24a; fi
     
    echo "##########################################################################" > $REP1/ECHK51.txt
    echo "##########################################################################" >> $REP1/ECHK51.txt
    echo "                               file gg2mw24a/1                            " >> $REP1/ECHK51.txt
    echo "##########################################################################" >> $REP1/ECHK51.txt
    echo "##########################################################################" >> $REP1/ECHK51.txt
    echo "" >> $REP1/ECHK51.txt
     
    cd $MTR1a
     
    for i in `seq 1 10000`; do
      if [ -f $MTR1a/z-gg2mw24a-$i.mtr ]; then 
        echo "" >> $REP1/ECHK51.txt
        echo "**********************" >> $REP1/ECHK51.txt
        echo " File $i" >> $REP1/ECHK51.txt
        echo "**********************" >> $REP1/ECHK51.txt
        echo "" >> $REP1/ECHK51.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24a-$i.mtr`" >> $REP1/ECHK51.txt
      fi
    done
     
    echo " Job Finished 1"
     
    ###################################################################
     
                           #files in gg2mw24a/2
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24a ]; then cd $CHK ; mkdir gg2mw24a; fi
     
    echo "##########################################################################" > $REP1/ECHK52.txt
    echo "##########################################################################" >> $REP1/ECHK52.txt
    echo "                               file gg2mw24a/2                            " >> $REP1/ECHK52.txt
    echo "##########################################################################" >> $REP1/ECHK52.txt
    echo "##########################################################################" >> $REP1/ECHK52.txt
    echo "" >> $REP1/ECHK52.txt
     
    cd $MTR2a
     
    for i in `seq 10000 $NMF`; do
      if [ -f $MTR2a/z-gg2mw24a-$i.mtr ]; then 
        echo "" >> $REP1/ECHK52.txt
        echo "**********************" >> $REP1/ECHK52.txt
        echo " File $i" >> $REP1/ECHK52.txt
        echo "**********************" >> $REP1/ECHK52.txt
        echo "" >> $REP1/ECHK52.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24a-$i.mtr`" >> $REP1/ECHK52.txt
      fi
    done
     
    echo " Job Finished 2"
     
    ###################################################################
     
                           #files in gg2mw24b/1
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24b ]; then cd $CHK ; mkdir gg2mw24b; fi
     
    echo "##########################################################################" > $REP2/ECHK51.txt
    echo "##########################################################################" >> $REP2/ECHK51.txt
    echo "                               file gg2mw24b/1                            " >> $REP2/ECHK51.txt
    echo "##########################################################################" >> $REP2/ECHK51.txt
    echo "##########################################################################" >> $REP2/ECHK51.txt
    echo "" >> $REP2/ECHK51.txt
     
    cd $MTR1b
     
    for i in `seq 1 10000`; do
      if [ -f $MTR1b/z-gg2mw24b-$i.mtr ]; then 
        echo "" >> $REP2/ECHK51.txt
        echo "**********************" >> $REP2/ECHK51.txt
        echo " File $i" >> $REP2/ECHK51.txt
        echo "**********************" >> $REP2/ECHK51.txt
        echo "" >> $REP2/ECHK51.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24b-$i.mtr`" >> $REP2/ECHK51.txt
      fi
    done
     
    echo " Job Finished 3"
     
    ###################################################################
     
                           #files in gg2mw24b/2
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24b ]; then cd $CHK ; mkdir gg2mw24b; fi
     
    echo "##########################################################################" > $REP2/ECHK52.txt
    echo "##########################################################################" >> $REP2/ECHK52.txt
    echo "                               file gg2mw24b/2                            " >> $REP2/ECHK52.txt
    echo "##########################################################################" >> $REP2/ECHK52.txt
    echo "##########################################################################" >> $REP2/ECHK52.txt
    echo "" >> $REP2/ECHK52.txt
     
    cd $MTR2b
     
    for i in `seq 10000 $NMF`; do
      if [ -f $MTR2b/z-gg2mw24b-$i.mtr ]; then 
        echo "" >> $REP2/ECHK52.txt
        echo "**********************" >> $REP2/ECHK52.txt
        echo " File $i" >> $REP2/ECHK52.txt
        echo "**********************" >> $REP2/ECHK52.txt
        echo "" >> $REP2/ECHK52.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24b-$i.mtr`" >> $REP2/ECHK52.txt
      fi
    done
     
    echo " Job Finished 4"
     
    ###################################################################
     
                           #files in gg2mw24c/1
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24c ]; then cd $CHK ; mkdir gg2mw24c; fi
     
    echo "##########################################################################" > $REP3/ECHK51.txt
    echo "##########################################################################" >> $REP3/ECHK51.txt
    echo "                               file gg2mw24c/1                            " >> $REP3/ECHK51.txt
    echo "##########################################################################" >> $REP3/ECHK51.txt
    echo "##########################################################################" >> $REP3/ECHK51.txt
    echo "" >> $REP3/ECHK51.txt
     
    cd $MTR1c
     
    for i in `seq 1 10000`; do
      if [ -f $MTR1c/z-gg2mw24c-$i.mtr ]; then 
        echo "" >> $REP3/ECHK51.txt
        echo "**********************" >> $REP3/ECHK51.txt
        echo " File $i" >> $REP3/ECHK51.txt
        echo "**********************" >> $REP3/ECHK51.txt
        echo "" >> $REP3/ECHK51.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24c-$i.mtr`" >> $REP3/ECHK51.txt
      fi
    done
     
    echo " Job Finished 5"
     
    ###################################################################
     
                           #files in gg2mw24c/2
     
    ###################################################################
     
    if [ ! -d $CHK/gg2mw24c ]; then cd $CHK ; mkdir gg2mw24c; fi
     
    echo "##########################################################################" > $REP3/ECHK52.txt
    echo "##########################################################################" >> $REP3/ECHK52.txt
    echo "                               file gg2mw24c/2                            " >> $REP3/ECHK52.txt
    echo "##########################################################################" >> $REP3/ECHK52.txt
    echo "##########################################################################" >> $REP3/ECHK52.txt
    echo "" >> $REP3/ECHK52.txt
     
    cd $MTR2c
     
    for i in `seq 10000 $NMF`; do
      if [ -f $MTR2c/z-gg2mw24c-$i.mtr ]; then 
        echo "" >> $REP3/ECHK52.txt
        echo "**********************" >> $REP3/ECHK52.txt
        echo " File $i" >> $REP3/ECHK52.txt
        echo "**********************" >> $REP3/ECHK52.txt
        echo "" >> $REP3/ECHK52.txt
        echo "`grep -A25 -B3 'hydro loop' z-gg2mw24c-$i.mtr`" >> $REP3/ECHK52.txt
      fi
    done
     
    echo " Job Finished 6"
    Le resultat trouve (et recherche) est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    **********************
     File 1
    **********************
     
      ECHK4  18696.  18844.  18844.  18844.     gain    148.
      eist esoll   20703.  20556.
      1     tau  0.10  emx  318.07  ECHK5  18858.  18844.  18844.      0.      0.
    hydro loop
      2 16  tau  0.52  emx   34.75  ECHK5  20015.  19992.  19992.   2639.
      3  8  tau  0.94  emx   14.80  ECHK5  20310.  20285.  20285.    470.
      4  8  tau  1.36  emx    8.06  ECHK5  20446.  20415.  20415.    529.
      5  4  tau  1.78  emx    5.24  ECHK5  20564.  20520.  20520.     82.
      6  4  tau  2.20  emx    3.86  ECHK5  20642.  20589.  20589.     84.
      7  4  tau  2.62  emx    3.22  ECHK5  20700.  20640.  20640.     89.
      8  4  tau  3.04  emx    2.90  ECHK5  20745.  20682.  20682.     97.
      9  4  tau  3.46  emx    2.55  ECHK5  20780.  20714.  20714.     96.
     10  4  tau  3.88  emx    2.20  ECHK5  20805.  20735.  20735.     94.
     11  4  tau  4.30  emx    1.87  ECHK5  20822.  20749.  20749.    103.
     12  4  tau  4.72  emx    1.57  ECHK5  20829.  20749.  20749.    106.
     13  4  tau  5.14  emx    1.30  ECHK5  20824.  20732.  20732.     99.
     14  4  tau  5.56  emx    1.08  ECHK5  20803.  20702.  20702.     98.
     15  4  tau  5.98  emx    0.89  ECHK5  20765.  20649.  20649.     92.
     16  4  tau  6.40  emx    0.74  ECHK5  20700.  20567.  20567.    103.
     17  4  tau  6.82  emx    0.61  ECHK5  20600.  20448.  20448.    109.
     18  4  tau  7.24  emx    0.51  ECHK5  20457.  20284.  20284.    107.
     19  4  tau  7.66  emx    0.43  ECHK5  20265.  20075.  20075.    107.
     20  4  tau  8.08  emx    0.36  ECHK5  20021.  19809.  19809.    100.
     21  4  tau  8.50  emx    0.31  ECHK5  19726.  19493.  19493.    103.
     22  4  tau  8.92  emx    0.26  ECHK5  19382.  19134.  19134.    100.
     23  4  tau  9.34  emx    0.22  ECHK5  18994.  18734.  18734.    100.
     24  4  tau  9.76  emx    0.19  ECHK5  18565.  18287.  18287.    107.
    destroy hlle;  memory    5904  ==>    4036
    destroy pitab;  memory    4036  ==>    3663
    --
      ECHK4  18880.  19033.  19033.  19034.     gain    154.
      eist esoll   20519.  20365.
      1     tau  0.10  emx  323.79  ECHK5  19047.  19034.  19034.      0.      0.
    hydro loop
      2 16  tau  0.51  emx   37.10  ECHK5  20188.  20164.  20164.   2897.
      3  8  tau  0.92  emx   16.40  ECHK5  20482.  20454.  20454.    517.
      4  8  tau  1.32  emx   10.27  ECHK5  20620.  20587.  20587.    570.
      5  4  tau  1.73  emx    6.97  ECHK5  20736.  20695.  20695.     96.
      6  4  tau  2.14  emx    5.11  ECHK5  20817.  20767.  20767.    100.
      7  4  tau  2.55  emx    3.85  ECHK5  20880.  20820.  20820.    104.
      8  4  tau  2.96  emx    3.02  ECHK5  20932.  20864.  20864.    109.
      9  4  tau  3.36  emx    2.40  ECHK5  20973.  20902.  20902.    117.
     10  4  tau  3.77  emx    1.92  ECHK5  21002.  20926.  20926.    118.
     11  4  tau  4.18  emx    1.54  ECHK5  21019.  20935.  20935.    123.
     12  4  tau  4.59  emx    1.23  ECHK5  21022.  20931.  20931.    126.
     13  4  tau  5.00  emx    1.04  ECHK5  21009.  20912.  20912.    122.
     14  4  tau  5.40  emx    0.87  ECHK5  20979.  20872.  20872.    127.
     15  4  tau  5.81  emx    0.73  ECHK5  20925.  20804.  20804.    129.
     16  4  tau  6.22  emx    0.62  ECHK5  20843.  20708.  20708.    119.
     17  4  tau  6.63  emx    0.52  ECHK5  20731.  20579.  20579.    123.
     18  4  tau  7.04  emx    0.44  ECHK5  20586.  20419.  20419.    126.
     19  4  tau  7.44  emx    0.38  ECHK5  20408.  20224.  20224.    122.
     20  4  tau  7.85  emx    0.32  ECHK5  20192.  19997.  19997.    122.
     21  4  tau  8.26  emx    0.28  ECHK5  19937.  19721.  19721.    117.
     22  4  tau  8.67  emx    0.24  ECHK5  19639.  19409.  19409.    112.
     23  4  tau  9.08  emx    0.21  ECHK5  19302.  19055.  19055.    114.
     24  4  tau  9.48  emx    0.18  ECHK5  18924.  18657.  18657.    111.
    destroy hlle;  memory    5935  ==>    4067
    destroy pitab;  memory    4067  ==>    3694
    --
      ECHK4  20871.  21037.  21037.  21038.     gain    168.
      eist esoll   18529.  18361.
      1     tau  0.10  emx  358.52  ECHK5  21054.  21038.  21038.      0.      0.
    hydro loop
      2 16  tau  0.52  emx   39.55  ECHK5  22362.  22339.  22339.   3025.
      3  8  tau  0.95  emx   17.10  ECHK5  22698.  22670.  22670.    506.
      4  8  tau  1.37  emx    9.73  ECHK5  22849.  22816.  22816.    569.
      5  4  tau  1.80  emx    6.52  ECHK5  22983.  22939.  22939.    101.
      6  4  tau  2.22  emx    4.75  ECHK5  23070.  23017.  23017.    104.
      7  4  tau  2.64  emx    3.58  ECHK5  23138.  23079.  23079.    115.
      8  4  tau  3.07  emx    2.73  ECHK5  23193.  23130.  23130.    108.
      9  4  tau  3.49  emx    2.11  ECHK5  23239.  23170.  23170.    118.
     10  4  tau  3.92  emx    1.76  ECHK5  23275.  23201.  23201.    125.
     11  4  tau  4.34  emx    1.47  ECHK5  23298.  23216.  23216.    125.
     12  4  tau  4.76  emx    1.22  ECHK5  23305.  23214.  23214.    124.
     13  4  tau  5.19  emx    1.01  ECHK5  23291.  23189.  23189.    129.
     14  4  tau  5.61  emx    0.84  ECHK5  23255.  23141.  23141.    125.
     15  4  tau  6.04  emx    0.70  ECHK5  23192.  23062.  23062.    120.
     16  4  tau  6.46  emx    0.59  ECHK5  23095.  22951.  22951.    118.
     17  4  tau  6.88  emx    0.49  ECHK5  22960.  22798.  22798.    117.
     18  4  tau  7.31  emx    0.42  ECHK5  22783.  22604.  22604.    117.
     19  4  tau  7.73  emx    0.36  ECHK5  22561.  22366.  22366.    121.
     20  4  tau  8.16  emx    0.31  ECHK5  22296.  22081.  22081.    121.
     21  4  tau  8.58  emx    0.26  ECHK5  21988.  21755.  21755.    115.
     22  4  tau  9.00  emx    0.23  ECHK5  21638.  21391.  21391.    121.
     23  4  tau  9.43  emx    0.20  ECHK5  21247.  20983.  20983.    118.
    destroy hlle;  memory    5935  ==>    4067
    destroy pitab;  memory    4067  ==>    3694
    exit hlle, taumax=   9.43
    --
      ECHK4  20353.  20522.  20522.  20521.     gain    168.
      eist esoll   19046.  18878.
      1     tau  0.10  emx  279.28  ECHK5  20532.  20521.  20521.      0.      0.
    hydro loop
      2 16  tau  0.52  emx   34.02  ECHK5  21835.  21812.  21812.   2993.
      3  8  tau  0.95  emx   15.27  ECHK5  22170.  22138.  22138.    523.
      4  8  tau  1.37  emx    9.56  ECHK5  22320.  22283.  22283.    587.
      5  4  tau  1.80  emx    6.71  ECHK5  22446.  22399.  22399.     96.
      6  4  tau  2.22  emx    5.02  ECHK5  22533.  22479.  22479.     95.
      7  4  tau  2.64  emx    3.82  ECHK5  22600.  22539.  22539.    103.
      8  4  tau  3.07  emx    2.92  ECHK5  22654.  22590.  22590.    106.
      9  4  tau  3.49  emx    2.29  ECHK5  22699.  22636.  22636.    107.
     10  4  tau  3.92  emx    1.89  ECHK5  22737.  22669.  22669.    127.
     11  4  tau  4.34  emx    1.60  ECHK5  22768.  22695.  22695.    121.
     12  4  tau  4.76  emx    1.35  ECHK5  22788.  22707.  22707.    124.
     13  4  tau  5.19  emx    1.13  ECHK5  22788.  22694.  22694.    128.
     14  4  tau  5.61  emx    0.95  ECHK5  22763.  22655.  22655.    125.
     15  4  tau  6.04  emx    0.80  ECHK5  22704.  22579.  22579.    124.
     16  4  tau  6.46  emx    0.66  ECHK5  22606.  22465.  22465.    125.
     17  4  tau  6.88  emx    0.55  ECHK5  22470.  22306.  22306.    126.
     18  4  tau  7.31  emx    0.46  ECHK5  22291.  22108.  22108.    120.
     19  4  tau  7.73  emx    0.39  ECHK5  22066.  21863.  21863.    119.
     20  4  tau  8.16  emx    0.33  ECHK5  21792.  21572.  21572.    129.
     21  4  tau  8.58  emx    0.29  ECHK5  21469.  21229.  21229.    127.
     22  4  tau  9.00  emx    0.25  ECHK5  21099.  20838.  20838.    115.
     23  4  tau  9.43  emx    0.22  ECHK5  20688.  20414.  20414.    114.
     24  4  tau  9.85  emx    0.19  ECHK5  20240.  19958.  19958.    119.
    destroy hlle;  memory    5935  ==>    4067
    destroy pitab;  memory    4067  ==>    3694
    Pour le fichier 1 etc pour la suite ...

    Ce que je cherche maintenant c'est faire la moyenne de tout les nombres de la dixieme colonne du tableau ou il y a hydro loop en plein milieu.

    J'imagine que je peux le faire egalement avec awk ? Mais cette fois ci ce n'est plus des lignes mais des colonnes ...

  15. #15
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    C'est un très bon exercice awk, allez courage...
    Cordialement.

  16. #16
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    il y a aussi un bon exercice shell, cette fois, qui consiste à ne pas réécrire du code qui se répète dans un script.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  17. #17
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2015
    Messages : 82
    Points : 44
    Points
    44
    Par défaut
    Pour la repetition en shell j'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    #!/bin/sh
     
    MTR1a=/scratch/theoric2/werner/public/outp/gg2mw24a/1
    MTR1b=/scratch/theoric2/werner/public/outp/gg2mw24b/1
    MTR2a=/scratch/theoric2/werner/public/outp/gg2mw24a/2
    MTR2b=/scratch/theoric2/werner/public/outp/gg2mw24b/2
    MTR1c=/scratch/theoric2/werner/public/outp/gg2mw24c/2
    MTR2c=/scratch/theoric2/werner/public/outp/gg2mw24c/2
     
    REP1=/users/theoric/sophys/EPOS/Check/gg2mw24a
    REP2=/users/theoric/sophys/EPOS/Check/gg2mw24b
    REP3=/users/theoric/sophys/EPOS/Check/gg2mw24c
     
    CHK=/users/theoric/sophys/EPOS/Check
     
    NMF=12786
     
    tri(){
    if [ ! -d $1 ]; then cd $CHK ; mkdir $2; fi
     
    echo "##########################################################################"
    echo "##########################################################################"
    echo "           file $3                            " 
    echo "##########################################################################"
    echo "##########################################################################"
    echo ""
     
    pathbase="$3/$4"
     
    cd $3
     
    for i in `seq $5 $6`; do
      if [ -f $pathbase-$i.mtr ]; then 
        echo "" 
        echo "**********************" 
        echo " File $i" 
        echo "**********************" 
        echo ""
        echo "`grep -A25 -B1 'hydro loop' $4-$i.mtr`" 
      fi
    done
     
    }
     
     
    {
    tri "$CHK/gg2mw24a/" gg2mw24a $MTR1a z-gg2mw24a 1 10000
    }> "$REP1/ECHK51.txt"
     
    echo " Job Finished 1"
     
    {
    tri "$CHK/gg2mw24a/" gg2mw24a $MTR2a z-gg2mw24a 10000 $NMF
    }> "$REP1/ECHK52.txt"
     
    echo " Job Finished 2"
     
    {
    tri "$CHK/gg2mw24b/" gg2mw24b $MTR1b z-gg2mw24b 1 10000
    }> "$REP2/ECHK51.txt"
     
    echo " Job Finished 3"
     
    {
    tri "$CHK/gg2mw24b/" gg2mw24b $MTR2b z-gg2mw24b 10000 $NMF
    }> "$REP2/ECHK52.txt"
     
    echo " Job Finished 4"
     
    {
    tri "$CHK/gg2mw24c/" gg2mw24c $MTR1c z-gg2mw24c 1 10000
    }> "$REP3/ECHK51.txt"
     
    echo " Job Finished 5"
     
    {
    tri "$CHK/gg2mw24c/" gg2mw24c $MTR2c z-gg2mw24c 10000 $NMF
    }> "$REP3/ECHK52.txt"
     
    echo " Job Finished 6"
    Pour le cote awk, je m'attelle a le faire actuellement

  18. #18
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Le pipe fait juste en sorte que la sortie de l'un soit l'entree de l'autre ?
    Oui. Cela évite des fichiers temporaires.
    Par exemple, awk ne m'a pas donné une sortie triée. Avec un pipe vers la fonction sort, et sans fichier intermédiaire, j'ai une sortie triée.
    J'aurais pu trier dans le script awk. Mais pas cette fois-ci.

    $1%20 donc ca c'est le modulo ?
    Oui, le reste de la division euclidienne.

    Ce que je cherche maintenant c'est faire la moyenne de tout les nombres de la dixieme colonne du tableau ou il y a hydro loop en plein milieu.
    L'astuce est peut-être de calculer la moyenne de chaque bloc et la rencontre avec la ligne "Hydro machin" affecte une variable qui provoquera l'affichage de la moyenne en fin de bloc.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  19. #19
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 549
    Points : 19 378
    Points
    19 378
    Par défaut
    Citation Envoyé par Flodelarab
    J'aurais pu trier dans le script awk. Mais pas cette fois-ci.
    et pourquoi ça, Môssieur Flodelarab ?
    caprice ? ou écueil structurel||technique ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  20. #20
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 276
    Points : 12 721
    Points
    12 721
    Par défaut
    Sous gnu awk, il existe une variable avec soit des valeurs prédéfini pour le tri ou alors on peut lui passer une fonction qui dit comment trier:
    Tri par ordre croissant numérique de l'indexe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ awk -F',' 'BEGIN{PROCINFO["sorted_in"]="@ind_num_asc"};($3!=""){sum[$1%20]+=$3;nb[$1%20]++;} END{for (i in nb) print i,sum[i]/nb[i];}' bbb.txt
    0 0.0244274
    1 1
    2 0.902329
    3 1.76399
    4 1.6557
    5 1.48638
    6 1.43282
    7 2.83486
    8 2.34358
    9 2.23822
    10 2.01993
    11 1.59067
    12 1.14066
    13 0.965337
    14 0.727977
    15 1.06883
    16 0.577039
    17 0.348666
    18 0.18404
    19 0.0946694
    Tri par ordre décroissant numérique de l'indexe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    $ awk -F',' 'BEGIN{PROCINFO["sorted_in"]="@ind_num_desc"};($3!=""){sum[$1%20]+=$3;nb[$1%20]++;} END{for (i in nb) print i,sum[i]/nb[i];}' bbb.txt
    19 0.0946694
    18 0.18404
    17 0.348666
    16 0.577039
    15 1.06883
    14 0.727977
    13 0.965337
    12 1.14066
    11 1.59067
    10 2.01993
    9 2.23822
    8 2.34358
    7 2.83486
    6 1.43282
    5 1.48638
    4 1.6557
    3 1.76399
    2 0.902329
    1 1
    0 0.0244274
    Pour le passage d'une fonction de tri, je vous laisse vous reporter à la documentation
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Problème avec l'utilisation de grep
    Par fgalves dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 07/11/2006, 23h49
  2. Utilisation de grep
    Par julien.63 dans le forum Shell et commandes GNU
    Réponses: 12
    Dernier message: 07/08/2006, 17h46
  3. [Sécurité] utiliser session ou non ?
    Par tigzirt dans le forum Langage
    Réponses: 5
    Dernier message: 12/05/2006, 14h48
  4. Réponses: 4
    Dernier message: 10/05/2006, 10h36
  5. [MySQL] Problème de connexion car mysql utilise un port non standard
    Par SsinedD dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 01/03/2006, 14h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo