AWK: Convierta la notación de un número mientras multiplico las columnas
-
21-12-2019 - |
Pregunta
Hola chicos Tengo las siguientes líneas:
A=3.5e30
B=4.345e40
(archivo contiene columnas con números en esta notación 1.2345678d + 10)
sed 's/D/E/g' File | awk '{print $1, $6*'$A', 10^($9)*'$B', $13, $8}' > File2
La salida que estoy recibiendo es:
3.168808781403E+02 29825999184755995994350665720659968 71343531834366140263241767594070376448 ... etc
¿Cómo puedo tener la 2ª y 3ª columna con la misma notación que en la primera columna?I.E,
en lugar de tener: 71343531834366140263241767594070376448
quiero: 7.134353183436E+37
Solo para hacerle saber la respuesta es:
sed 's/D/E/g' File | awk '{printf "%.12E %.12E %.12E %.12E %.12E\n", $1, $6*'$A', 10^($9)*'$B', $13,$8 }' > File2
Solución
Si desea la llamada notación científica, utilice el especificador de formato PRIMF y GENACODICETAGOTEGODEGOTE.
Ejemplo:
echo 71343531834366140263241767594070376448 | awk '{printf "%E",$1}'
Salida:
7.134353E+37
Otros consejos
awk 'BEGIN { printf("%E\n", 71343531834366140263241767594070376448); }'
7.134353E+37
Simplemente use printf()
en lugar de print()
:
$ awk 'BEGIN { printf "%e\n", 282048204209482034890 }' /dev/null
2.820482e+20
Hay un par de problemas que necesita para arreglar en sus códigos:
-
Uso de shell var en AWK:
awk -v awkVar1="$A" -v awkVar2="$B" ... '{use awkVar1 without $}' file
-
Para obtener un formato de notación científica, necesita definir el formato con
printf
, uno de%E, %e, %g, %G
sería útil para usted.