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 :

Trie d'un fichier de données avec une colonne date


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut Trie d'un fichier de données avec une colonne date
    Bonjour,

    J'ai un fichier de données formaté comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 01-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 19-FEB-2009 SAB5
    etc...

    la 15eme colonne est une date au format un peu exotique... Bref,

    Mon but est de filtrer les données comprises entre 2 dates. J'ai déjà fait un petit bash qui lit le fichier ligne par ligne, et, qui compare la date dans une fonction:
    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
     
    date_is_beetwin()
    {
    DATE_ENTREE=$(date -d "$1" +%Y-%m-%d)
    TIMEST_ENTREE=$(date -d "$DATE_ENTREE" +%s)
     
    DATE_DEBUT=$(date -d "$2" +%Y-%m-%d)
    TIMEST_DEBUT=$(date -d "$DATE_DEBUT" +%s)
     
    DATE_FIN=$(date -d "$3" +%Y-%m-%d)
    TIMEST_FIN=$(date -d "$DATE_FIN" +%s)
     
     test $(($TIMEST_DEBUT - $TIMEST_ENTREE)) -le 0 -a $(($TIMEST_ENTREE - $TIMEST_FIN))  -le 0  && return 0 || return 1
    }
     
    while read ligne
    do
       set $(echo $ligne)
       pDate=$(eval echo ${16})
       pFreq=$(eval echo ${14})
     
    if date_is_beetwin $pDate $dateMin $dateMax ; then
        echo "date:${pDate} dans tmpTot.dat"
        echo $ligne >>  tmpTot.dat
    else
        echo "date:${pDate} exclue"
    fi
     
    done < exportFiltre.dat
    Le problème c'est que mon fichier contient plusieurs 100ene de lignes et que ça met des heures!!!

    Avez vous des pistes pour que le filtre soit plus rapide?

    Merci et très bonne journée

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    Un fichier plus étoffé :
    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
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 01-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 01-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 04-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 03-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 06-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 05-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 09-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 07-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 10-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 09-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 23-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 11-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 13-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 13-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 16-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 15-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 20-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 17-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 22-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 19-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 27-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 21-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 31-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 23-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 28-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 25-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 02-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 27-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 15-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 29-FEB-2009 SAB5
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 12-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 02-FEB-2009 SAB5
    Une commande fonctionnelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #!/bin/bash
    sort -k16,16 -M test.txt | sed -n "/15-JAN-2009/,/15-FEB-2009/p"
    il suffit de remplacer le texte en rouge par les bornes que tu desire et par le nom du fichier.
    Pour ce fichier j'ai mis 0,05 s.
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    C'est magnifique!

    Merci pour ton aide

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Par défaut
    Salut,

    De rien
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Membre averti
    Inscrit en
    Septembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 29
    Par défaut
    Je n'avais pas bien regarder, mais apparament ca ne marche pas au niveau des années:
    Par exemple
    J'ai modifie quelque année dans le fichier 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
    offline$ sort -k16,16 -M test.txt | sed -n "/15-JAN-2009/,/15-FEB-2009/p"
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 15-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 16-JAN-2006 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 20-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 22-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 23-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 27-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 28-JAN-2009 RD9A
    1323 0.95 0.0012 0.95 0.0008 0.95 0.0009 0.97 0.0014 0.95 0.0013 0.93 0.0013 104.22 2 31-JAN-2009 RD9A
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 01-FEB-2007 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 02-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 03-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 05-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 07-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 09-FEB-2008 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 11-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 13-FEB-2009 SAB5
    1326 0.95 0.0010 0.94 0.0017 0.96 0.0004 0.97 0.0011 0.92 0.0010 0.00 0.0000 92.64 2 15-FEB-2009 SAB5
    Il affiche des date d'annee differente

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 663
    Par défaut
    Il faut aller plus loin dans le tri...
    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
    sort -t'-' -k3,3n -k2,2M -k1.100n i.dat
    9271  0.87  0.0019  0.91  0.0020  0.85  0.0027  0.85  0.0027  0.90  0.0040  0.87  0.0028  230.54 2 23-FEB-2003  S078
    9271  0.87  0.0019  0.91  0.0020  0.85  0.0027  0.85  0.0027  0.90  0.0040  0.87  0.0028  230.54 2 25-FEB-2003  S078
    9271  0.88  0.0029  0.89  0.0020  0.82  0.0026  0.84  0.0020  0.93  0.0045  0.86  0.0025  230.54 1 25-FEB-2004  S078
    9273  0.94  0.0018  0.94  0.0010  0.94  0.0010  0.95  0.0007  0.93  0.0010  0.92  0.0006  105.85 1 28-JAN-2005  R0B7
    9290  0.80  0.0139  0.80  0.0181  0.88  0.0206  0.83  0.0308  0.84  0.0163  0.79  0.0179   93.00 1 17-DEC-2006  S05B
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 01-FEB-2007  SAB5
    9187  0.91  0.1349  0.91  0.1521  0.90  0.1367  0.00  0.0000  0.89  0.1309  0.91  0.1323   86.24 2 13-OCT-2007  FLUX
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 09-FEB-2008  SAB5
    9187  0.90  0.1384  0.91  0.1415  0.92  0.1479  0.00  0.0000  0.89  0.1191  0.90  0.1279   86.24 1 13-OCT-2008  FLUX
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 20-JAN-2009  RD9A
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 22-JAN-2009  RD9A
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 23-JAN-2009  RD9A
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 27-JAN-2009  RD9A
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 28-JAN-2009  RD9A
    1323  0.95  0.0012  0.95  0.0008  0.95  0.0009  0.97  0.0014  0.95  0.0013  0.93  0.0013  104.22 2 31-JAN-2009  RD9A
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 02-FEB-2009  SAB5
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 03-FEB-2009  SAB5
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 05-FEB-2009  SAB5
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 07-FEB-2009  SAB5
    9142  0.96  0.0055  0.99  0.0054  0.89  0.0027  0.80  0.0024  0.91  0.0022  0.89  0.0012  245.80 B 08-FEB-2009  R08B
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 11-FEB-2009  SAB5
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 13-FEB-2009  SAB5
    1326  0.95  0.0010  0.94  0.0017  0.96  0.0004  0.97  0.0011  0.92  0.0010  0.00  0.0000   92.64 2 15-FEB-2009  SAB5
    J'ai modifié le séparateur de champs par défaut : le champ 3, c'est l'année; le 2,le mois; et le 3ème, à partir du 100è caractère, c'est le jour. J'applique, pour chacun, un filtre : 3-numérique, 2-mois, 1-numérique.

    De plus, il faut que la limite inférieure fournie à sed existe : sed ne renverra rien s'il ne trouve pas cette date. Et, de la même manière, si la limite supérieure n'existe pas, sed affichera le fichier depuis la limite inférieure trouvée jusquà la fin du fichier.

    --
    J'espère n'avoir pas dit de bêtises... ;-)
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/01/2011, 13h01
  2. Charger un fichier de données avec une entête
    Par gmachi10 dans le forum MATLAB
    Réponses: 7
    Dernier message: 15/07/2008, 18h57
  3. Pb d'insertion avec une colonne DATE
    Par FDR2006 dans le forum Firebird
    Réponses: 6
    Dernier message: 03/12/2007, 13h31
  4. [format des données avec une procédure stockée]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 10/03/2005, 13h24
  5. Réponses: 2
    Dernier message: 14/05/2004, 14h32

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