versão 3 use um arquivo awk como
function tenth(x) {
u = x ; if ( u < 0 ) u = -x ;
b=10 ;
a=b-2 ;
if ( u >= 10 ) {
d=int(log(u)/log(10)) ;
a=b-d-1 ;
}
printf "%*.*f",b,a,x ;
}
length($1) == 4 { print ; next ;}
NF == 1 { d=int(log($1)/log(10)) ;if (d> -1) d++ ; printf " %.7fE%+03d\n",$1/(10^d),d ;}
NF == 2 { printf " " ; tenth($1); printf " " ; tenth($2) ; printf "\n" ;}
onde
-
lengtht$1) == 4 { print ; next ;}
deixará a linha sozinha, onde o primeiro campo é quatro letras (que pode ser 1234) -
function tenth(x)
: define uma função que ajusta a formatação. -
"%*.*f"
string ajusta o tamanho / precisão de%f
conversion. primeiro * é substituído por b, segundo * é substituído por um. -
int(log()/log(10))
dá um log decimal que ajusta a representação para sua necessidade específica?
use-o com
awk -f f.awk input
que dão como resultado
BALT 1
54.5000000 -161.070000
0.3958638E+01
0.1691576E-01
BALT 2
-9.20000000 67.1200000
0.4075299E+01
0.1951653E-01
BALT 3
43.8300000 142.520000
0.4089198E+01
0.5873400E-02
0.00000000 1.00000000
-3.14150000 2.71828183