Convertendo formato numérico e comparando o arquivo

0

Eu tenho um arquivo com 174 campos. Os primeiros 4 campos são fornecidos abaixo

1|2.3|2.3|34
1|0|0|34
1|0.0|0.0|34
1|11|11|34
1|.3|.3|34
1|-0.00|-0.00|34
1|1.67|1.67|34

Eu preciso convertê-lo para isso:

1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34

Eu usei o seguinte, mas o último valor veio como 1|1.70|1.70|34 .

awk 'BEGIN {OFS=FS="|"} {$2=$2+0.00;$3=$3+0.00; print $0 }' file1 > temp1
awk 'BEGIN {OFS=FS="|"} {$2=sprintf("%.2f",$2);$3=sprintf("%.2f",$3);print $0}' temp1 > temp2
    
por Sivabalan Divya 24.04.2018 / 19:23

2 respostas

4

Com o utilitário numfmt do GNU Coreutils:

numfmt --delimiter='|' --field=2-3 --format='%.2f' < file
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.31|0.31|34
1|0.00|0.00|34
1|1.67|1.67|34

Ajuste o intervalo de campo --field=2-3 de acordo com suas necessidades

    
por 24.04.2018 / 21:18
0

Sua segunda construção awk é quase perfeita. Tente isto

awk -F'|' 'BEGIN {OFS = FS} {$2 = sprintf("%0.2f", $2+0); $3 = sprintf("%0.2f", $3+0); print $0}'
1|2.30|2.30|34
1|0.00|0.00|34
1|0.00|0.00|34
1|11.00|11.00|34
1|0.30|0.30|34
1|0.00|0.00|34
1|1.67|1.67|34
    
por 24.04.2018 / 20:28