Specifier nombre caractere à lire - awk

Résolu
teab -  
 teab -
Bonjour,

Une nouvelle question m'amène ici, et je vous remercie (encore) par avance!
Voila mon problème. J' ai un fichier qui contient N lignes.
Je dois me placer à la ligne i qui ressemble à ca:

3.03800E+01-7.00611E-01 4.59240E-02 | H

Je dois dans un premier temps lire les trois valeurs qui comme vous pouvez le voir ne sont pas très bien séparées.

Pour lire la première et la troisième ça va. Mais pour lire la deuxième ( -7.00611E-01) ca me pose problème.

Par la suite il faut aussi que je modifie ces valeurs et j'ai le même problème.

Je voudrais donc trouver une méthode permettant de spécifier le nombre de caractère à lire ou à modifier pour chaque valeur. Du 12 au 23 pour la deuxième par exemple.

J'espère que ma question est claire.

Merci
teab

2 réponses

  1. ripat_ Messages postés 61 Statut Membre 6
     
    Bonjour,

    As-tu regardé la fonction substr() de awk? Si tes champs ont une longueur fixe, elle devrait t'apporter la solution.

    Pour le reste du traitement, donne-nous un exemple plus concret d'entrée et de sortie désiré.
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    il y a aussi la variable FIELDWIDTHS de gawk
    $ echo "3.03800E+01-7.00611E-01 4.59240E-02 | H"|gawk 'BEGIN{FIELDWIDTHS="11 12 12"};{print $1, $2, $3}'
    3.03800E+01 -7.00611E-01  4.59240E-02
    $ 
    0
    1. teab
       
      Merci à vous deux. Je vais conserver la solution de Dubcek pour la lecture.
      Pour l'écriture j'essai de trouver en adaptant....
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      pour l'écriture, tu peux utiliser le format %e
      $ echo "3.03800E+01-7.00611E-01 4.59240E-02 | H"|gawk 'BEGIN{FIELDWIDTHS="11 12 12"};{printf "%.5E%.5E %.5E\n", $1, $2, $3}'
      3.03800E+01-7.00611E-01 4.59240E-02
      $
      
      0
    3. teab
       
      Quand je disais ecriture, je parler de modification, par exemple remplacer le deuxième champ par :

      -0.00000E+00
      0
    4. teab
       
      je parlais**
      0
    5. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      $2=-0.00000E+00
      0