Specifier nombre caractere à lire - awk

Résolu/Fermé
teab - 15 juin 2010 à 15:51
 teab - 18 juin 2010 à 09:06
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

A voir également:

2 réponses

ripat_ Messages postés 60 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 29 juillet 2010 6
16 juin 2010 à 07:23
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
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
16 juin 2010 à 09:09
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
Merci à vous deux. Je vais conserver la solution de Dubcek pour la lecture.
Pour l'écriture j'essai de trouver en adaptant....
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
16 juin 2010 à 12:23
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
Quand je disais ecriture, je parler de modification, par exemple remplacer le deuxième champ par :

-0.00000E+00
0
je parlais**
0
dubcek Messages postés 18752 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 3 octobre 2024 5 619
16 juin 2010 à 12:46
$2=-0.00000E+00
0