
Я инструментировал сборку mvn для выпуска данных профилирования, которые я хочу проанализировать позже. Поэтому я создал скрипт sed ниже, чтобы генерировать json-data из выходных данных профилировщика. Я вызываю скрипт с помощью
cat some.log | sed -nf thescript.sed > some.json
Он создает вложенный список json-объектов («проектов»), но каждый список заканчивается символом «,».
Чтобы создать из этого корректный файл json, я выполняю следующие шаги в моем любимом редакторе.
- Объединяем все в одну линию
- вставьте объект-оболочку, добавив "{\"list\":[" в начало и "]}" ко всему содержимому.
- заменить все вхождения ", ]" (неправильно завершенные списки) на "]"
- Вставляйте перенос строки после каждого проекта, чтобы избежать сбоев при анализе JSON из-за слишком длинной строки.
В настоящее время я выполняю эти действия вручную и хочу также запрограммировать их на выполнение.
- Как мне заставить скрипт sed выдавать корректный JSON (т.е. делать переносы строктолькокогда я хочу их, или не ставьте завершающий ",")
или как я могу записать шаги, описанные выше, в другой фильтр?
/[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