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

Posté par  .
Étiquettes : aucune
0
25
juin
2009
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

OJ
  • # un indice

    Posté par  . Évalué à 4.

    la variable RS (Record Separator) de Awk

    http://people.cs.uu.nl/piet/docs/nawk/nawk_19.html
  • # solution vite fait

    Posté par  . Évalué à 3.

    Voici une idée de solution (non testée, à verifier) :

    S'il s'agit juste d'eclater les blocs, c''est à) dire bloc 1 ecrit tel quel dans fichier.1, bloc 2 dans fichier.2, etc, alors il "suffit", lorsqu'on voit passer un '>', de changer le nom du fichier de sortie. Ce qui donne :

    awk 'BEGIN{file = "bloc_file";i=0; fichier_courrant = file "." i} />/{i++ ; fichier_courrant = file "." i; next} {print > fichier_courrant}'

    grosso modo : quand on voit passer ">", on incremente un compteur de blocs, i, puis on change le nom de fichier "bloc_file.i". next permet de passer direct à la ligne suivant, pour eviter le print.
    En temps normal, on se contente de faire un print de la ligne lue dans le fichier courrant.
    Le bloc BEGIN initialise les variables.



  • # Un truc du genre ?

    Posté par  (site web personnel) . Évalué à 4.

    awk 'BEGIN{RS=">"}{print $0 >> "file."NR}'
  • # awk ou ... ?

    Posté par  . Évalué à 3.

    man split, surtout l'option -l =)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.