Tengo varias entradas que describen un evento en un archivo de registro muy grande, digamos A.log . Me gustaría hacer dos cosas con las entradas de eventos en el archivo de registro:
- Cuente el número de ocurrencias de cada una de estas entradas (este no es un requisito obligatorio, pero sería bueno tenerlo).
- Extraiga las entradas reales en un archivo separado y estudielas más adelante.
Una entrada de evento típica sería similar a la siguiente y tendrá otros textos entre ellas. Entonces, en el ejemplo a continuación hay dos entradas de eventos , la primera que contiene dos DataChangeEntry
cargas útiles y la segunda que contiene una DataChangeEntry
carga útil.
Data control raising event :DataControl@263c015d[[
#### DataChangeEvent #### on [DataControl name=PatternMatch_LegendTimeAxis, binding=.dynamicRegion1. beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxisPageDef_beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxis_xml_ps_taskflowid.dynamicRegion58. beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxisPageDef_beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxis_xml_ps_taskflowid.QueryIterator]
Filter/Collection Id : 0
Collection Level : 0
Sequence Id : 616
ViewSetId : PatternMatch.LegendTimeAxis_V1_0_SN49
==== DataChangeEntry (#1)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 11, StrAvgCallWaitTimeGreaterThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
==== DataChangeEntry (#2)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 9, AverageCallWaitingTimeGreateThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
]]
someother non useful text
spanning multiple lines
Data control raising event :DataControl@263c015d[[
#### DataChangeEvent #### on [DataControl name=PatternMatch_LegendTimeAxis, binding=.dynamicRegion1. beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxisPageDef_beam_project_PatternMatch_dashboard_LegendTimeAxis_taskflow_LegendTimeAxis_beamDashboardLegendTimeAxis_xml_ps_taskflowid.dynamicRegion58. beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxisPageDef_beam_project_PatternMatch_view_LegendTimeAxis_taskflow_LegendTimeAxis_beamVizLegendTimeAxis_xml_ps_taskflowid.QueryIterator]
Filter/Collection Id : 0
Collection Level : 0
Sequence Id : 616
ViewSetId : PatternMatch.LegendTimeAxis_V1_0_SN49
==== DataChangeEntry (#1)
ChangeType : UPDATE
KeyPath : [2014-06-26 06:15:00.0, 0]
AttributeNames : [DATAOBJECT_CREATED, COUNTX, QueryName]
AttributeValues : [2014-06-26 06:15:00.0, 11, StrAvgCallWaitTimeGreaterThanThreshold]
AttributeTypes : [java.sql.Timestamp, java.lang.Integer, java.lang.String, ]
]]
Tenga en cuenta que el número de ==== DataChangeEntry
líneas en una entrada de evento puede ser variable. También puede estar completamente ausente, lo que indicaría una carga útil de eventos vacía y es una condición de error y definitivamente también me gustaría detectar este caso.
Como en este caso la salida de la entrada se extiende a través de varias líneas, no estoy llegando lejos usando grep simple de vainilla. Por eso estoy buscando consejos de expertos.
PD:
- Déjame ser más explícito sobre mi requerimiento. Me gustaría capturar todo el bloque de texto que se muestra arriba textualmente y, opcionalmente, contar el número de instancias de dichos bloques encontrados. Es bueno tener la opción de contar el número de instancias, pero no es un requisito obligatorio.
- Si la solución al problema es usar awk, me gustaría guardar el archivo awk y volver a usarlo. Por lo tanto, mencione los pasos para ejecutar el script también. Sé regex y grep pero no estoy familiarizado con sed y / o awk.
Data control raising event
?