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 :

Ventilation d'un fichier en sous fichier


Sujet :

Shell et commandes GNU

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut Ventilation d'un fichier en sous fichier
    Bonjour,

    J'ai un fichier et je souhaite l'éclater en sous fichiers.

    Exemple
    AAAAAA MOTIF1 AZERTYUIOPAZERTYUIOP
    BBBBBB MOTIF2 AZERTYUIOPAZERTYUIOPPAOPO
    CCCCC MOTIF3 AZERTYUIOPAZERTYUIOPPPPPP
    DDDDD MOTIF1 AZERTYUIOPAZERTYUIOPAZEPROT
    EEEEEE MOTIF1 AZERTYUIOPAZERTYUIOP
    ....

    Je souhaite ventiler ce fichier en trois sous-fichiers :

    Le 1er contiendra que les enregistrements correspondants à MOTIF1
    Le 2ème contiendra que les enregistrements correspondants à MOTIF2
    Le 3ème contiendra que les enregistrements correspondants à MOTIF3

    Au même temps que je ventile, je souhaite ne lire le fichier d'origine d'une seule fois. La raison est simple, il est assez volumineux.

    Avez-vous une idée.

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    la solution simple sans controles d'erreurs et se basant uniquement sur la position du motif recherché :
    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
     
    $ cat t | while read ligne                     
    > do
    > echo $ligne >> $(echo $ligne | awk '{print $2}')
    > done
    $ ls -lrth | tail -5
    drwx------  2 francois  wheel   512B Sep  6 18:10 orbit-francois
    -rw-r--r--  1 francois  wheel   190B Sep  6 18:23 t
    -rw-r--r--  1 francois  wheel    40B Sep  6 18:30 MOTIF2
    -rw-r--r--  1 francois  wheel    39B Sep  6 18:30 MOTIF3
    -rw-r--r--  1 francois  wheel   111B Sep  6 18:30 MOTIF1
    $ cat MOTIF1
    AAAAAA MOTIF1 AZERTYUIOPAZERTYUIOP
    DDDDD MOTIF1 AZERTYUIOPAZERTYUIOPAZEPROT
    EEEEEE MOTIF1 AZERTYUIOPAZERTYUIOP
    $ cat MOTIF2
    BBBBBB MOTIF2 AZERTYUIOPAZERTYUIOPPAOPO
    $ cat MOTIF3
    CCCCC MOTIF3 AZERTYUIOPAZERTYUIOPPPPPP
    par contre méfiance ... si tu as 47383 motifs distincts tu auras aussi 47384 fichiers (en comptant le fichier lu)
    dans certaines situations ça peut être emmerdant.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    Merci pour la réponse.

    J'ai fait un test sur un fichier de 2 millions d'enregistrements et le temps est extrêmement lent. C'est la raison pour laquelle je relance ma demande.

    Est-ce qu'il y a une autre méthode qui me permettra de répondre à mon besoin et dans le même temps, d'optimiser mon temps de traitement ?

    Merci d'avance pour votre aide.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 472
    Points
    19 472
    Par défaut
    plouf plouf

    awk, perl, python... C !?

    sur des gros fichiers, bien sûr, bash n'est pas le plus rapide langage !

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    L'idéal, ça serait en awk

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 588
    Points : 19 472
    Points
    19 472
    Par défaut
    OK !
    à quel nom je mets la facture ? ton employeur...?

    meuh, non ! j'rigole

    + sérieusement, au vu de tes besoins récurrents, apprend donc un langage plus approprié que le shell (cf. supra.)
    on (sinon moi) sera toujours là pour t'aider !

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 80
    Points : 88
    Points
    88
    Par défaut
    Tu as raison !

Discussions similaires

  1. Réponses: 15
    Dernier message: 28/11/2008, 17h57
  2. Réponses: 2
    Dernier message: 20/12/2006, 10h51
  3. Réponses: 5
    Dernier message: 06/03/2003, 13h27

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