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

Linux Discussion :

trier et classer sur un tableau


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut trier et classer sur un tableau
    Bonjour.

    Quand je lance la script j'ai actuellement ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     ./test.ksh -s
    mois DTU_SUPP_LOT_TABLE_FORMAT. type de DT :  0
    mois BD0032. type de DT :  0
    mois BD0020. type de DT :  0
    mois DTR_MAJ_FORMAT_FACTURE. type de DT :  0
    mois 11 type de DT : DTI 11
    mois BD0043. type de DT :  0
    mois BD0023. type de DT :  0
    mois 11 type de DT : DTR 3
    mois BD0013. type de DT :  0
    mois BD0001. type de DT :  0
    mois DTR_DEVERROU_CPTE. type de DT :  0
    mois BD0062. type de DT :  0
    mois DTR_MAJ_STATUS_CPT. type de DT :  0
    le script :
    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
     $ vi ./test.ksh
    "./b1.ksh" 73 lines, 1340 characters
    #!/bin/ksh
    USAGE=${USAGE:-"mois=<mm> [filtre=<DTI|DTR>]"}
    fct_usage ()
    {
    echo "$USAGE "
    exit 1
    }
     
    # Selection des options sur la ligne de commande
    [ "$(echo "$1"|cut -c1-2)" != "-s" ] && echo "$(basename $0) -s[tart] $USAGE" && exit 1
    shift && while [ $# -gt 0 ]
     do
     [ $(echo $1|grep -c "=" ) = 0 ] && break
        eval   export $(echo $1|sed -e 's/=/="/' -e 's/$/"/')
        shift
     done
    [ -n "$debug" ] && PS4='$LINENO '${ps4:-'>'}' ' && set -x
     
    fct_trait ()
    {
    #echo traitement de $1
    zgrep "${lfiltre}_" $1 |awk ' $0 ~ "Lancement" {
    nb += 1
    print "___",$(NF)
    #ZZ[$(NF)]++
    #print $NF
     }
    END {
    if (nb != 0)
     {
    # for (k in ZZ )
    #  print k"a ete lance" ZZ[k] "fois"
     printf ("mois %s : Nombre de %s trouves %d \n","'${m}'","'${lfiltre}'",nb)
     }
     
     }'
    }
    filtre=${filtre:-"DTI DTR"}
     
     
    fct_mois ()
    {
     for m in $mois
     do
    for lfiltre in $filtre
      do
    #si mois courant  , on inclut la felog
    for k in $([ ! -n "$jour" ] && ls /toto/titi.${m}*) $([ $m = $(date '+%m') ] &&  echo $FE_LOG)
    #for k in $([ ! -n "$jour" ] && ls /toto/titi.${m}*) $([ $m = $(date) ] &&  echo $LOF_LOG)
     do
    fct_trait $k
       done
      done
     done
    }
     
    [ $# -eq 0 -a "$mois" = "" ] && jour=y
    [  -n "$jour"  ] && mois=$(date '+%m')
    #fct_mois
     
     
    fct_somme ()
    {
    fct_mois | awk '{
    tab["mois "$2" type de DT : "$6] += $8
    }
    END {
    for (k in tab)
     print k , tab[k]
    }'
    }
     
    fct_somme
    Je voudrais avoir comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ./test.ksh -s
    mois 11 type de DT : DTI 11
    BD0032
    BD0020 
    BD0043. 
    BD0023. 
    BD0013. 
    BD0001. 
    BD006  
    DTU_SUPP_LOT_TABLE_FORMAT
    mois 11 type de DT : DTR 3
    DTR_DEVERROU_CPTE
    DTR_MAJ_FORMAT_FACTURE
    DTR_MAJ_STATUS_CPT
    Merci d'avance.
    Fichiers attachés Fichiers attachés
    • Type de fichier : txt DT.txt (10,0 Ko, 58 affichages)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    et... ?

    ce n'est, ici, pas une fontaine à souhait, où l'on jette ses intentions avec le script, en espérant que tout se passe comme par magie.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    trier selon quel(s) critère(s) ?

    si, dans le fichier donné en lien, je recherche pour le mois de novembre(11) les DTI qui ont été lancés, je n'obtiens pas le résultat que tu montres :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $ awk -vmois=11 -vcherche=DTI '$0 ~ "[0-9][0-9][0-9][0-9]/"mois"/[0-9][0-9]" && $0 ~ cherche && /Lancement/{array[n++]=$NF};END{printf("nb2%s au mois %s: %d\n",cherche,mois,n); for(i in array)print array[i]}' ../21/DT.txt 
    nb2DTI au mois 11: 11
    BD0023.
    BD0001.
    BD0020.
    BD_DELETTRAGE_RDS.
    BD0062.
    BD0013.
    DTU_SUPP_LOT_TABLE_FORMAT.
    DT_MAJ_PACKAGE.
    DTR_MAJ_DATE_OF.
    DTR_DEVERROU_CPTE.
    DTR_MAJ_BI_PAY_METHOD.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Quand je lance le script je voudrais avoir 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
    ./test.ksh -s
    mois 11 type de DT : DTI 11
    BD0032
    BD0020 
    BD0043. 
    BD0023. 
    BD0013. 
    BD0001. 
    BD006 
    DTU_SUPP_LOT_TABLE_FORMAT
    mois 11 type de DT : DTR 3
    DTR_DEVERROU_CPTE
    DTR_MAJ_FORMAT_FACTURE
    DTR_MAJ_STATUS_CPT

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    je ne pourrais jamais obtenir cette sortie avec le fichier de données que tu as mis en lien, car, au moins, BD0032 n'y figure pas. Ce serait bien de donner le fichier qui correspond.

    et je te le demande encore une fois, quel(s) est/sont le(s) critère(s) de tri ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    Quand je lance le script, je voudrais avoir ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    ./test.ksh -s
    mois 11 type de DT : DTI 11
    BD0032
    BD0020 
    BD0043. 
    BD0023. 
    BD0013. 
    BD0001. 
    BD006 
    DTU_SUPP_LOT_TABLE_FORMAT
    mois 11 type de DT : DTR 3
    DTR_DEVERROU_CPTE
    DTR_MAJ_FORMAT_FACTURE
    DTR_MAJ_STATUS_CPT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Line 975: 2011/11/17 20:00:20 DTI_ANHDI5_NHJDI501_2397 FE0 fe0 2397 CA.LancerDT.sh NHTZ999IX00NN INFO Lancement de la DT : DTR_MAJ_DATE_OF.
    Line 2243: 2011/11/17 20:00:51 DTI_ANHDI5_NHJDI501_2397 FE0 fe0 2397 CA.LancerDT.sh NHTZ999IX00NN INFO Lancement du BD : BD0023
    Il faut compter le nombre de DTI et DTR puis donner les types de DT par jour et par mois.
    Le script il fait par jour et par mois.

    Une DT est peut être soit DTI ou DTR.

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    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
    #!/bin/ksh
    USAGE=${USAGE:-"mois=<mm> [filtre=<DTI|DTR>]"}
    fct_usage ()
    {
    echo "$USAGE "
    exit 1
    }
     
    # Selection des options sur la ligne de commande
    [ "$(echo "$1"|cut -c1-2)" != "-s" ] && echo "$(basename $0) -s[tart] $USAGE" && exit 1
    shift && while [ $# -gt 0 ]
     do
     [ $(echo $1|grep -c "=" ) = 0 ] && break
        eval   export $(echo $1|sed -e 's/=/="/' -e 's/$/"/')
        shift
     done
    [ -n "$debug" ] && PS4='$LINENO '${ps4:-'>'}' ' && set -x
     
    fct_trait ()
    {
    #echo traitement de $1
    zgrep "${lfiltre}_" $1 |awk ' $0 ~ "Lancement" {
    nb += 1
    ZZ[substr($(NF),1,length($(NF))-1)]++
    #print $NF
     }
    END {
    if (nb != 0)
     {
      #printf ("mois %s : Nombre de %s trouves %d \n","'${m}'","'${lfiltre}'",nb)
      printf ("mois %s : global_%s : %d \n","'${m}'","'${lfiltre}'",nb)
      for (z in ZZ)
       printf ("mois %s : %s : %d \n","'${m}'",z,ZZ[z])
       #print z,ZZ[z]
     }
     
     }'
    }
    filtre=${filtre:-"DTI DTR"}
     
     
    fct_mois ()
    {
     for m in $mois
     do
    for lfiltre in $filtre
      do
    #si mois courant  , on inclut la felog
    for k in $([ ! -n "$jour" ] && ls /archivelog/fe0log.${m}*) $([ $m = $(date '+%m') ] &&  echo $FE_LOG)
     do
    fct_trait $k
       done
      done
     done
    }
     
    [ $# -eq 0 -a "$mois" = "" ] && jour=y
    [  -n "$jour"  ] && mois=$(date '+%m')
     
     
    fct_somme ()
    {
    fct_mois|sort| awk -F: '{
    mois[$1]++
    DT[$1" "$2] += $3
     }
    END {
    for (k in DT)
     print k,DT[k]
    }'|sort
    }
     
    fct_somme
    Résultat :

    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
    mois 11   BD0001  1
    mois 11   BD0013  1
    mois 11   BD0023  1
    mois 11   BD0032  1
    mois 11   BD0043  1
    mois 11   BD0062  1
    mois 11   BD0070  1
    mois 11   DTR_DEVERROU_CPTE  2
    mois 11   DTR_MAJ_BI_PAY_METHOD  2
    mois 11   DTR_MAJ_D05  2
    mois 11   DTR_MAJ_DATE_AR  2
    mois 11   DTR_MAJ_FIN_OT  2
    mois 11   DTU_SUPP_LOT_TABLE_FORMAT  1
    mois 11   global_DTI  13
    mois 11   global_DTR  5
    J'avance mais le résultat me convient pas :
    Je voudrais :

    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
    mois 11   global_DTI en tout : 13
     
    mois 11   DTU_SUPP_LOT_TABLE_FORMAT  1
    mois 11   BD0001  1
    mois 11   BD0013  1
    mois 11   BD0023  1
    mois 11   BD0032  1
    mois 11   BD0043  1
    mois 11   BD0062  1
    mois 11   BD0070  1
     
    mois 11   global_DTR  :5
     
    mois 11   DTR_DEVERROU_CPTE  2
    mois 11   DTR_MAJ_BI_PAY_METHOD  2
    mois 11   DTR_MAJ_D05  2
    mois 11   DTR_MAJ_DATE_AR  2
    mois 11   DTR_MAJ_FIN_OT  2
    Merci d'avance.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut awk seul avec des tableaux associatifs
    Voici un exemple de ce qui pourrait être fait en utilisant des tableaux associatifs, et un semblant de multidimension, mais que tu devrais pouvoir facilement adapter :
    Code fichier source : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    1;smth;foo bar baz
    2;smth_else;foo1 bar1 baz1
    2;smth;foo2 bar2 baz2
    2;smth_else;foo3 bar3 baz3
    Ce fichier est beaucoup plus simple, c'est juste pour l'exemple
    Code awk : 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
    #!/usr/bin/awk -f
     
    BEGIN{
       FS=";"
       SUBSEP=":"
    }
    {
       var_nb = $1; var_sm = $2
       matchD[var_nb]++
       matchT[var_nb,var_sm]++
       if(content[var_nb,var_sm]){ content[var_nb,var_sm] = content[var_nb,var_sm]"\n"$3 }else{ content[var_nb,var_sm] = $3 }
    }
    END{
       for(d in matchD){
          print d": "matchD[d]
          for(t in matchT){
             if( t ~ "^"d":" ){
                split(t,a,":")
                print a[2]": "matchT[t]
                for(c in content){
                   if ( c ~ "^"t"$"){
                      print content[c]
                   }   
                }   
             }   
          }   
       }   
    }
    Ce script ne cherche pas de correspondances, il faudra que tu les ajoutes
    Code sortie : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    1: 1
    smth: 1
    foo bar baz
    2: 3
    smth_else: 2
    foo1 bar1 baz1
    foo3 bar3 baz3
    smth: 1
    foo2 bar2 baz2
    il suffit d'étendre le principe de ce script à tes besoins.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    ça ne marche pas

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    pousse le, ça le fera peut-être rouler…
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    humour!!!!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour deen113,

    Comment as-tu adapté les exemples que je t'ai montré ?
    Ça ne marche pas comment ?
    y a-t-il une erreur qui s'affiche ? ça affiche quoi, au lieu de quoi ?


    "çô marche pô"
    ça n'explique rien.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    qd j'ai essayé de l'adapter ca m'a fait trop bug ... je continue a chercher...mais ca n'avance pas trop alors je pousse sur le net...lol!!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    bon courage.

    un peu de lecture ? (tu les as peut-être déjà trouvé)
    gawk user's guide (en anglais)
    Tuto gawk ici
    un autre très bon (en anglais)
    dans l'Advanced Bash Scripting
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Octobre 2011
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 9
    Points : 0
    Points
    0
    Par défaut
    c gentil !!

Discussions similaires

  1. Références et pointeurs sur un tableau
    Par smag dans le forum C++
    Réponses: 2
    Dernier message: 01/03/2005, 20h29
  2. function sur un tableau
    Par bibi2607 dans le forum ASP
    Réponses: 9
    Dernier message: 17/02/2005, 09h54
  3. Réponses: 2
    Dernier message: 08/04/2004, 16h30
  4. Comment faire un Drag&Drop sur un tableau
    Par Stef.web dans le forum Composants VCL
    Réponses: 6
    Dernier message: 11/10/2003, 13h12
  5. [VBA-E] Dim dynamique sur un tableau
    Par Vince69 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2002, 13h32

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