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
Preguntas relacionadas
Nuevas preguntas
awk
AWK es un lenguaje de programación interpretado diseñado para el procesamiento de texto y generalmente se utiliza como una herramienta de extracción de datos e informes. AWK se usa en gran medida con sistemas Unix.