Script awk : extraction de données

Résolu
bouna -  
 bouna -
Bonjour,

je souhaite avoir un scripte sh qui fait l'extraction de données dans un fichier fich1 contenant plusieurs enregistrementspour contituer le fichier fich2
le fichier fich1 contient:
- un entete et un pied de page
- et plusieurs lignes contenant 849 caracteres chacune.
le scripte doit extraire les données de la meme ligne aux positions:
- 31 à 50
- 353 à 364
- 364 à 372
- 372 à 377
- 470 à 500
puis separe ces champs par un par '|'

merci de m'aider pour ce script

2 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    il ne faut traiter qu'une ligne ou toutes les lignes de 849 caractères ?
    LIGNE contient le No de la ligne à traiter
    LIGNE=x
    $ awk -v L=$LIGNE 'NR==L {print substr($0,31,20) "|" substr($0,353,12) "|" substr($0,364,9) "|" substr($0,372,6) "|" substr($0,470,31)}' fich1 > fich2
    $
    1
    1. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Salut,

      J'ai demandé si awk est obligatoire, puisque pour ce genre de traitement je préfère sed par exemple.
      0
    2. bouna
       
      il faudra traiter tous les lignes, je m'explique:
      cat fich:

      1 ----------------------------- ceci est l'entete du fichier ------------------------------------
      2 00CH39078 NOYAU PARIS KJHU89374 Y 83909937 - UYTEG ** UEY
      3 00CH69385 TRAITRD JAPON GUH93845 N 73897838 - ZEGGH ** HHU
      4
      .........................................................................................................
      .........................................................................................................
      n -------------------------------- (n-2)ceci est la fin du fichier -------------------------------


      - ici la longueur de la ligne est fixé a 60 caracteres (mon fichier reel 848 caracteres)
      - le nombre de ligne est mentionné a la fin ligne a la position 36 et s'ecrie sur trois caractere '999' .
      0
    3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      le nombre de ligne est mentionné a la fin ligne a la position 36 et s'ecrie sur trois caractere '999'
      la position 36 de la dernière ligne donne le nombre de lignes à traiter ?
      0
    4. bouna
       
      non, mais l'ensemble de mes scriptes sont sous awk.
      as tu une proposition? avec plaisir
      0
    5. bouna
       
      oui c'est le nombre de ligne a traiter
      0
  2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    0
    1. bouna
       
      bjr lami, ce cas est un fichier de longueur indefinie et n'insere pas le caracter | entre les champs.
      merci de maider !!!
      0
    2. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
       
      Re,

      Quelque soit la ligne tu dois extraire toujours au même endroit?
      awk c'est obligatoire?
      Un exemple de quelques lignes de ton fichier sera mieux.
      0