Extraire les infos des entètes d'une série de

romaingeol -  
romaingeol Messages postés 1 Statut Membre -
Bonjour,

Voila, je dois créer une base de données regroupant les informations contenues dans les entètes de fichiers ASCII.
Mes fichiers sont classés dans des sous répertoires, j'aurais donc besoin d'un code qui parcourt les sous-dossiers et extrait les infos de chaque entète.

Les entètes se présentent sous formes de champs: date, localisation, distance etc.
Les entètes ont toutes le m^me format, plusieurs champs sont présents sur une m^me ligne.
Comment faire pour extraire la valeur (binaire ou chaine de caractère) faisant suite au champ "NOM", par exemple? mais sans déborder sur le champ suivant....

Je n'ai pas mis le nez dans les shells depuis bien longtemps mais je crois me souvenir que l'on peut faire ce genre de chose avec awk.

Ce serait super si quelqu'un me donnait un exemple de scipt permettant d'extraire deux ou trois champs des ent^tes d'une dizaine de fichiers répartis dans des sous répertoires.

Merci beaucoup
Configuration: Windows XP
Firefox 2.0

7 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    T'aurais pas un modèle de fichier à nous afficher plutôt avec un exemple de ce que tu veux récupéer, ce serait beaucoup plus simple pour nous...
    0
  2. romaingeol
     
    Voici un exemple d'entète, je voudrai extraire la date, la latitude, longitude etc...

    ===============================================================

    ---- EVENT
    Source : Sismalp
    Localisation :
    Julian Date : 1989 6 - Time : 20: 51: 34
    Latitude : 43.537 - Longitude : 5.234 - Depth : 0.0
    Magnitude Local : 2.46
    ---- STATION :CBB - NETWORK :Sismalp
    Latitude : 44.597 - Longitude : 6.855 - Elevation : 1990.0
    Depth : 0.000 - Site : Near_sou - Sensor : WIL1
    Distance to event : 175.3
    Event to station azimuth : 47.23
    Station to event azimuth : 228.36
    ---- RECORD
    Julian Day : 6/1989
    Time : 20:51:34.289
    Sample rate : 0.02000 - Nb points : 2048
    Componente : Z - Unit : c

    ===================================================================

    Il s'agit de fichier ascii et non pas de classeurs excell

    Merci
    0
  3. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Ok, mais il aurait fallu le format de sortie désiré aussi... et savoir si tu veux toutes les "Latitudes, Longitudes, etc." ou simplement certaines quand elles sont répétées plusieurs fois...

    En attendant, voilà un exemple :
    awk -F"-" '/Date/ { print $1 } ; /Latitude/ { printf " %s\n%s\n",$1,$2 }' fichier
    Julian Date : 1989 6
     Latitude : 43.537
     Longitude : 5.234
     Latitude : 44.597
     Longitude : 6.855
    A adapter ;-))
    0
  4. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  5. romaingeol
     
    Bon c déja pas mal

    Je voudrais differencier les 2 Lat et Lon et créer un fichier texte en colonnes de type:

    Date heure Lat Lon Depth Station Lat(station) Lon(station)

    Faire une base de données quoi...

    Peux tu me détailler la commande awk que tu m'as donné?
    0
  6. romaingeol
     
    Avec la commande que tu m'as donné on extrait le champ en entier, est-il possible de ne garder que la valeur (eliminer "latitude par exemple")?

    Merci
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      $ awk -F":" '/Date/ { print substr($2,2,7),$3":"$4":"$5 }' plop
      1989 6   20: 51: 34
      
      $ awk -F": " '/Latitude/ { print substr($2,1,6) }' plop
      43.537
      44.597
      Par contre pour le reste tu devrais attendre que "dubcek" passe dans le coin, c'est lui le spécialiste avec "awk" (sans oublier le reste aussi ;-) ).

      ;-))
      0
  7. romaingeol Messages postés 1 Statut Membre
     
    Voila J'ai écris un script "awk" qui me permet d'extraire les informations d'un fichier:

    BEGIN {FS="- "};
    {OFS=":"};
    NR==1 {printf "%s:", FILENAME};
    NR==33 {printf "%s:", $1};
    NR==34 {printf "%s:", $1};
    NR==35 {printf "%s:", $1};
    NR==36 {printf "%s:", $1};
    NR==24 {printf "%s:%s:%s :",$1,$2,$3};
    /Magnitude/ {printf "%s :", $1};
    NR==27 {printf "%s:%s:%s :",$1,$2,$3};
    END {printf "\n"}

    je le lance en faisant awk -f toto.awk input.asc > toto.txt

    Comment faire maintenant pour que je scan tout les fichiers et les répertoire d'un répertoire donné?
    0