Forma eficaz de alterar o formato dos dados numéricos

1

Então eu tenho um arquivo grande contendo os valores de uma matriz com o seguinte formato:

(0,0) 0.6666
(0,1) 0.0000
(0,2) 1.3333
...

E eu quero convertê-lo para:

0 0 0.6666e+00
0 1 0.0000e+00
0 2 1.3333e+00
...

Eu posso fazer isso com o seguinte script:

#!/bin/bash

input="$1"
while read coord val; do
   printf "%s" "${coord//,/ }" | awk -F '[()]' '{printf "%s",$(NF-1)}'  
   printf " %8.3e\n" "$val"
done < "$input"

Mas isso é extremamente lento para o meu caso (9409 linhas) Como posso fazer isso mais rápido?

    
por Msegade 26.02.2016 / 13:41

2 respostas

2

Aqui está uma abordagem awk ligeiramente diferente. Isso deve ser mais rápido do que usar sub e gsub 1 :

awk -F'[(,)]' '{printf "%s %s %8.3e\n",$2,$3,$4}' file

1 Eu testei em um arquivo com 5000000 linhas e foi ~ 2 segundos mais rápido que a abordagem gsub / sub. Não é uma grande diferença, mas pode ser importante para arquivos grandes.

    
por 26.02.2016 / 14:22
2

Será mais rápido se você deixar awk fazer isso sozinho:

awk '
{
  gsub("[()]", "", $1)
  sub(",", " ", $1)
  $2 = sprintf("%8.3e", $2)
  print
}' <file
    
por 26.02.2016 / 13:48