Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/08/2009, à 15:48

saeglopur

LINUX : conversion nombre scientifique en nombre decimal (awk, printf)

bonjour,
je crois que j'ia un probleme de gestion de format avec awk et printf dans un script en ksh.

j'ai un fichier resultat.txt

temps        resultat
2.90E+04          4.5E+06
2.95E+04          4.9E+06
3.00E+04          5.2E+06
3.05E+04          5.5E+06
3.10E+04          6.1E+06
3.15E+04          6.2E+06
3.20E+04          6.5E+06
3.25E+04          7.1E+06
3.30E+04          7.5E+06
3.35E+04          7.2E+06
3.40E+04          7.7E+06

et un fichier listing.txt dont voici un extrait

resultat au temps 29000  s
a
z

listing au temps 29500  s
e
r

listing au temps 30000  s
t
y

listing au temps 30500  s
u
i

listing au temps 31000  s
o
p

dans mon fichier resultat.txt, pour une certaine de valeur de mon resultat (par exemple 5.5E+06), j'aimerais recupérer son temps (ici 3.05E+04).
Une fois que je connais ce temps, j'aimerais lire dans listing.txt les lignes du listing qui corresponds à mon temps (ici listing au temps 30500  s).

j'ai ce script fait en ksh :

#!/bin/ksh
echo "recherche instant"
time=`awk '{if (NR>1 && $2>=valeur && i==0) {i+=1;print $1}}' valeur=5.5E+06 resultat.txt`
echo $time
awk 'BEGIN {fff == 0;}
{if (/listing au temps/ && $4>=inst && i==0)     {fff = 1; i+=1}
                        {
                        if ( ( fff != 0 ) && ( fff < 4) ) {
                        print $0 ;
                        fff++;
                        }
                        }
}' inst=$time listing.txt

et voila ce qu'il m'affiche à l'écran

recherche instant
3.05E+04
listing au temps 30000  s
t
y

il me lit bien l'instant qui vaut 3.05E+04.
mais la lecture dans listing est fausse.

je crois que le probleme est dans le format des nombres lus : comme y a à la fois des ecriture scientifiques dans resultat.txt et decimale dans listing.txt.
j'ai essaye de faire

integer time=`awk '{if (NR>1 && $2>=valeur && i==0) {i+=1;printf("%1.1f",$1)}}' valeur=5.5E+06 resultat.txt`

time=`awk '{if (NR>1 && $2>=valeur && i==0) {i+=1;print $1}}' valeur=5.5E+06 resultat.txt`

mais voila ce que j'ai à l'ecran

recherche instant
3
listing au temps 29500  s
e
r

bref, je suis perdu.
comment gerer cette histoire de format?

merci

Dernière modification par saeglopur (Le 26/08/2009, à 15:49)

Hors ligne

#2 Le 26/08/2009, à 16:31

Totor

Re : LINUX : conversion nombre scientifique en nombre decimal (awk, printf)

Bonjour,

Je n'ai pas de soucis avec ces 2 lignes :

#!/bin/ksh
duree="$(awk -v valeur=5.5E+06 '$2 == valeur { print $1 }'  resultat.txt)"
awk -v valeur="${duree}" ' /listing/ { afficher=0} afficher==1 { print} $4 == valeur { print; afficher=1 } ' listing.txt

Dernière modification par Totor (Le 26/08/2009, à 16:32)


-- Lucid Lynx --

Hors ligne

#3 Le 27/08/2009, à 12:57

haku_arsene

Re : LINUX : conversion nombre scientifique en nombre decimal (awk, printf)

Salut !
Pour la conversion de nombre scientifique en décimal j'ai trouvé ce lien :
http://www.linuxquestions.org/questions … on-215864/
Et ils y proposent :

echo "5.083E-5" | awk -F"E" 'BEGIN{OFMT="%10.10f"} {print $1 * (10 ^ $2)}'

Par ce que bc n'a pas l'air de gérer ça...

Hors ligne