2013-05-22 7 views
5

mam takiego plikuKonwersja exponentials i numery zaokrąglenie w bash

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

i muszę konwertować go do czegoś jak

0.15 7.57 0.40 

znaczy ja chcę numery być tylko 2 miejsc po przecinku i nie być wykładniczy. Chcę użyć bash!

+2

atakujących nie robi dziesiętne. –

Odpowiedz

3

ten może pracować:

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 

W twoim przypadku,

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

To nie pokazuje, jak odczytać dane wejściowe z pliku i oryginalny format pliku zostanie utracony. –

+0

Tak, widzę, zobacz moją zaktualizowaną odpowiedź. – fedorqui

+0

Nie łączymy tutaj żadnych plików, więc wyrzucamy "xargs printf" UUoC "% 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) chcesz 'done

+0

@UUoC: Wiedziałem, że ktoś wskaże to ... :-) –

5

Korzystanie printf z awk:

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

mieć więcej pól, co chcesz pętli jak:

$ 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 dla ratunek jeszcze raz. +1 –