Question

Salut les gars, j'ai les lignes suivantes :

A=3.5e30
B=4.345e40

(Le fichier contient des colonnes avec des nombres dans cette notation 1.2345678D+10)

sed 's/D/E/g' File | awk '{print $1, $6*'$A', 10^($9)*'$B', $13, $8}' > File2

Le résultat que j'obtiens est :

3.168808781403E+02 29825999184755995994350665720659968 71343531834366140263241767594070376448 ... etc

Comment puis-je avoir la 2ème et la 3ème colonne avec la même notation que dans la première colonne ?C'est à dire,

Au lieu d'avoir : 71343531834366140263241767594070376448

Je veux: 7.134353183436E+37

Juste pour vous dire que la réponse est :

 sed 's/D/E/g' File | awk '{printf "%.12E %.12E %.12E %.12E %.12E\n", $1, $6*'$A', 10^($9)*'$B', $13,$8 }' > File2
Était-ce utile?

La solution

Si vous voulez la notation dite scientifique, utilisez printf et %E spécificateur de format.

Exemple:

echo 71343531834366140263241767594070376448 | awk '{printf "%E",$1}' 

Sortir:

7.134353E+37

Autres conseils

awk 'BEGIN { printf("%E\n", 71343531834366140263241767594070376448); }'
7.134353E+37

Utilisez simplement printf() au lieu de print():

$ awk 'BEGIN { printf "%e\n", 282048204209482034890 }' /dev/null
2.820482e+20

il y a quelques problèmes que vous devez résoudre dans vos codes :

  • utilisation du shell var dans awk :

    awk -v awkVar1="$A" -v awkVar2="$B" ... '{use awkVar1 without $}' file
    
  • pour obtenir le format de notation scientifique, vous devez définir le format avec printf, un des %E, %e, %g, %G vous serait utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top