Tengo varias filas que se parecen a esto,

[206, 40, 200] 3.588939213064659e-06
[206, 40, 58, 200] 1.0137134449402395e-05
[206, 200] 1.2268187790002155e-05
[206, 38, 200] 3.2630262623982875e-05
[206, 40, 38, 200] 3.273281423485983e-05
[206, 40, 58, 38, 200] 3.341643719910475e-05

¿Hay alguna manera eficiente de convertirlos a lo siguiente usando sed / awk,

206 40 200
206 40 58 200
206 200
206 38 200
206 40 38 200 
206 40 58 38 200

Y esto,

206 40 200 0.000003588939213064659
206 40 58 200 0.000010137134449402395
206 200 0.000012268187790002155
206 38 200 0.000032630262623982875
206 40 38 200 0.00003273281423485983
206 40 58 38 200 0.00003341643719910475

¡Gracias!

1
kwaldner 10 may. 2019 a las 04:30

3 respuestas

La mejor respuesta

Respondiendo al último requisito, intente:

awk '
{
    split($0, a, "] +")
    gsub("[[,]", "", a[1])
    printf("%s %.21f\n", a[1], a[2])
}' file
0
tshiono 10 may. 2019 a las 02:09

Solo necesita un separador de campo regex y conversión de formato a variable.

$ awk -F'[][, ]+' '$NF=sprintf("%.21f",$NF)' file

editar: La fácil es awk -F'[][, ]+' '{$NF=""}1'

1
vintnes 10 may. 2019 a las 23:39

Para su primera pregunta intente lo siguiente.

awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);print val}'  Input_file

Para su segunda pregunta, ¿podría intentar seguir?

awk 'match($0,/\[.*\]/){val=substr($0,RSTART+1,RLENGTH-2);gsub(","," ",val);printf("%s %.21f\n",val,$NF)}'  Input_file
0
RavinderSingh13 10 may. 2019 a las 02:07