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 :

Extraire des blocs de données dans un fichier. AWK?


Sujet :

Linux

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2009
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 25
    Points : 21
    Points
    21
    Par défaut Extraire des blocs de données dans un fichier. AWK?
    Bonjour à tous

    J'ai un fichier composé de blocs de données X,Y,Z séparés par un charactere ">"


    Exemple:

    42.5410004 0.644999981 13.8727398
    44.1360016 0.791999996 21.1379795
    51.4070015 1.41900003 14.7873116
    52.9020004 1.13199997 19.1322193
    54.4259987 1.03100002 23.6299133
    59.7490005 1.67999995 16.2121506
    63.5789986 1.28299999 19.9306469
    64.2229996 1.30299997 18.8378506
    67.4649963 1.53699994 26.7516766
    >
    3.89400005 1.13999999 23.7990761
    5.55200005 0.379999995 18.7354698
    6.38700008 0.379999995 13.1045876
    8.33500004 0.779999971 23.61022
    8.74100018 1.07000005 27.360714
    10.5299997 1.18799996 21.182085
    16.4780006 1.847 15.4479456
    20.0279999 1.11500001 16.2119923
    22.1509991 1.06099999 16.6239166
    ....
    >


    Les blocs ont toujours la même taille (28lignes)

    Je voudrais écrire un script awk qui me permette d'extraire le premier bloc dans un fichier temporaire qui sera utilisé par un programme tiers, puis faire la même chose pour le second bloc et ce jusqu'au dernier bloc.


    Est ce que quelqu'un peut m'aider, je suis plutôt rouillé et j'ai pas beaucoup de temps devant moi


    Merci beaucoup

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 739
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 739
    Points : 31 068
    Points
    31 068
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par oliverjack Voir le message
    Bonjour à tous

    J'ai un fichier composé de blocs de données X,Y,Z séparés par un charactere ">"


    Exemple:

    42.5410004 0.644999981 13.8727398
    44.1360016 0.791999996 21.1379795
    51.4070015 1.41900003 14.7873116
    52.9020004 1.13199997 19.1322193
    54.4259987 1.03100002 23.6299133
    59.7490005 1.67999995 16.2121506
    63.5789986 1.28299999 19.9306469
    64.2229996 1.30299997 18.8378506
    67.4649963 1.53699994 26.7516766
    >
    3.89400005 1.13999999 23.7990761
    5.55200005 0.379999995 18.7354698
    6.38700008 0.379999995 13.1045876
    8.33500004 0.779999971 23.61022
    8.74100018 1.07000005 27.360714
    10.5299997 1.18799996 21.182085
    16.4780006 1.847 15.4479456
    20.0279999 1.11500001 16.2119923
    22.1509991 1.06099999 16.6239166
    ....
    >


    Les blocs ont toujours la même taille (28lignes)

    Je voudrais écrire un script awk qui me permette d'extraire le premier bloc dans un fichier temporaire qui sera utilisé par un programme tiers, puis faire la même chose pour le second bloc et ce jusqu'au dernier bloc.


    Est ce que quelqu'un peut m'aider, je suis plutôt rouillé et j'ai pas beaucoup de temps devant moi


    Merci beaucoup
    Je connais pas assez bien awk pour faire ça. Mais ça se fait en shell pur sans pb
    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
    #!/bin/sh
     
    exec 3>"/tmp/fic_0"
    bloc=0
    cat fichier_a_traiter |while read lig
    do
        if test "$lig" = ">"
        then
            bloc=`expr $bloc + 1`
            exec 3>"/tmp/fic_$bloc"
            continue
        fi
     
        echo "$lig" 0>&3
    done
    Ou bien, si le shell n'est pas assez rapide, en Python...

    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
    #!/bin/env python
    # coding: Latin-1 -*-
     
    f_in=open("fichier_a_traiter", "r")
    f_out=open("/tmp/fic_0", "w")
     
    bloc=0
    for lig in f_in:
        if "$lig" == ">":
            f_out.close()
            bloc+=1
            f_out=open("/tmp/fic_%d" % (bloc), "w")
            continue
        # if
     
        f_out.write(lig)
    # for
     
    f_in.close()
    f_out.close()

  3. #3
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Juste pour être complet, la version awk :

    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
    BEGIN {
        tempo = "/tmp/fic_0"
        printf "" > tempo
    }
     
    /^>$/ {
        close(tempo)
        bloc++
        tempo = "/tmp/fic_" bloc
        printf "" > tempo
        getline
    }
     
    { print >> tempo }
     
    END { close(tempo) }

Discussions similaires

  1. [MySQL] Comment extraire des données dans un fichier .svc depuis une page web
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2013, 13h02
  2. Extraire des données dans un fichier
    Par kali38 dans le forum Général Python
    Réponses: 4
    Dernier message: 31/01/2011, 14h51
  3. Extraire des chaines de caractères dans un fichier
    Par cycy75 dans le forum Scripts/Batch
    Réponses: 16
    Dernier message: 27/03/2009, 15h56
  4. Réponses: 5
    Dernier message: 05/12/2008, 16h23
  5. Extraire des données dans un fichier .csv
    Par orj30754 dans le forum C
    Réponses: 7
    Dernier message: 03/11/2006, 15h48

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