
Instrumenté una compilación de mvn para emitir datos de perfiles, que quiero analizar más adelante. Por lo tanto, creé el script sed a continuación para generar datos json a partir de la salida de los perfiladores. Llamo al guión con
cat some.log | sed -nf thescript.sed > some.json
Produce una lista anidada de objetos json ("proyectos"), pero cada lista termina con un ",".
Para crear un archivo json válido a partir de esto, realizo los siguientes pasos en mi editor favorito.
- Uniendo todo a una línea
- inserte un objeto envolvente anteponiendo "{\"list\":[" y agregando "]}" a todo el contenido.
- reemplace todas las apariciones de ", ]" (listas terminadas incorrectamente) por "]"
- inserte un salto de línea después de cada proyecto, para evitar fallas en el análisis JSON debido a una línea demasiado larga.
Actualmente realizo estos pasos manualmente y también quiero tener esto escrito.
- ¿Cómo puedo hacer que el script sed produzca un json válido (es decir, hacer saltos de línea?solocuando los quiero, o no pongas eso terminando ","")
¿O cómo puedo programar los pasos anteriores en otro filtro?
/[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) started./{"\2":{"timestamp":\1,"project":"\2","tasks":"\4","branch":"\3","segments":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) started./{"\2":{"timestamp":\1,"segment":"\2","mojos":[/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) started./{"\2":{"timestamp":\1,"mojo":"\2","execution":"\3",/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (mojo-execute \(.*\) {execution: \(.*\)}) finished.*duration \(.*\)ms./"duration":\4}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (Segment:\(.*\)) finished.*duration \(.*\)ms./],"duration":\3}},/p /[PROFILER]/ s/\[PROFILER\] \(.*\)ms : Task (project-execute new-mvifp:\(.*\):\(.*\) ( task-segment: \[\(.*\)\] )) finished.*duration \(.*\)ms./],"duration":\5}},/p