2013-05-22 19 views
5

ho un tale fileConvertire esponenziali e numeri di arrotondamento in bash

1.5000000000E-01 7.5714285714E+00 4.0000000000E-01 
2.5000000000E-01 7.5714285714E+00 4.0000000000E-01 

e devo convertirlo in qualcosa di simile a

0.15 7.57 0.40 

voglio dire che voglio i numeri per essere con solo 2 decimali e non essere esponenziale. Voglio usare bash!

+2

Bash non fa decimali. –

risposta

3

Questo può funzionare:

printf "%1.2f" $number 

prova:

$ for i in 1.5000000000E-01 7.5714285714E+00 4.0000000000E-01 2.5000000000E-01 7.5714285714E+00 4.0000000000E-01; 
do 
    printf "%1.2f\n" $i 
done 
0.15 
7.57 
0.40 
0.25 
7.57 
0.40 

Nel tuo caso,

cat file | xargs printf "%1.2f\n" 

prova:

$ cat file | xargs printf "%1.2f\n" 
0.15 
7.57 
0.40 
0.25 
7.57 
0.40 
+0

Questo non dimostra come leggere l'input dal file e il formato originale del file è perso. –

+0

Sì, vedo, vedere la mia risposta aggiornata. – fedorqui

+0

Qui non concateniamo nessun file, quindi buttiamo via UUoC 'xargs printf"% 1.2f \ n "

2
$ cat numbers.txt 
1.5000000000E-01 7.5714285714E+00 4.0000000000E-01 
2.5000000000E-01 7.5714285714E+00 4.0000000000E-01 

$ while read F1 F2 F3;do printf "%.2f %.2f %.2f\n" $F1 $F2 $F3;done < numbers.txt 
0.15 7.57 0.40 
0.25 7.57 0.40 
+0

[UUoC] (http://partmaps.org/era/unix/award.html) vuoi 'done

+0

@UUoC: sapevo che qualcuno lo indicherà ... :-) –

5

Utilizzando printf con awk:

$ awk '{printf "%.2f %.2f %.2f\n",$1,$2,$3}' file 
0.15 7.57 0.40 
0.25 7.57 0.40 

dato più campi che si vorrebbe ciclo come:

$ awk '{for(i=1;i<=NF;i++)printf "%.2f ",$i;print "\n"}' file 
0.15 7.57 0.40 
0.25 7.57 0.40 
+1

awk to il salvataggio ancora una volta. +1 –