#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
zlisting au temps 29500 s
e
rlisting au temps 30000 s
t
ylisting au temps 30500 s
u
ilisting 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