2013-05-22 16 views
5

ich habe eine solche DateiKonvertieren Exponentialgrößen und Rundungs ​​Zahlen in BASH

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

und ich habe es so etwas wie

0.15 7.57 0.40 

konvertieren Ich meine, ich möchte, dass die Zahlen mit nur 2 Dezimalstellen sein und nicht exponentiell sein. Ich möchte bash benutzen!

+2

Bash nicht Dezimalstellen tun. –

Antwort

3

Dies kann funktionieren:

printf "%1.2f" $number 

Test:

$ 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 

In Ihrem Fall

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

Test:

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

Dies zeigt nicht, wie die Eingabe aus der Datei gelesen wird und das ursprüngliche Format der Datei verloren geht. –

+0

Ja, ich sehe meine aktualisierte Antwort. – fedorqui

+0

Wir verketten keine Dateien hier, also wirf die 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) du willst 'done

+0

@UUoC: Ich wusste, dass jemand darauf hinweisen wird ... :-) –

5

Mit printf mit awk:

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

Gegeben mehr Felder, die Sie Schleife wollen würden:

$ 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 die Rettung noch einmal. +1 –

Verwandte Themen