J'ai plusieurs entrées qui décrivent un événement dans un très gros fichier journal, par exemple A.log . Je voudrais faire deux choses avec les entrées d' événement dans le fichier journal:
- Comptez le nombre d'occurrences de chacune de ces entrées (ce n'est pas une exigence obligatoire mais ce serait bien d'avoir).
- Extrayez les entrées réelles dans un fichier séparé et étudiez-les ultérieurement.
Une entrée d'événement typique ressemblerait à ce qui suit et aura d'autres textes entre eux. Ainsi, dans l'exemple ci-dessous, il y a deux entrées d' événement , la première contenant deux DataChangeEntry
charges utiles et la seconde contenant une DataChangeEntry
charge utile.
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, ]
]]
Veuillez noter que le nombre de ==== DataChangeEntry
lignes dans une entrée d'événement peut être variable. Il peut également être complètement absent, ce qui indiquerait une charge utile d'événements vide et constitue une condition d'erreur et aimerait certainement intercepter ce cas également.
Étant donné que dans ce cas, la sortie d'entrée s'étend sur plusieurs lignes, je ne vais pas loin en utilisant grep vanilla simple. Je recherche donc des conseils d'experts.
PS:
- Permettez-moi d'être plus explicite sur mon exigence. Je voudrais capturer l'intégralité du bloc de texte montré ci-dessus textuellement et éventuellement compter le nombre d'instances de ces blocs rencontrées. L'option de compter le nombre d'instances est bonne, mais n'est pas obligatoire.
- Si la solution au problème utilise awk, je voudrais enregistrer le fichier awk et le réutiliser. Veuillez donc également mentionner les étapes pour exécuter le script. Je connais regex et grep mais je ne connais pas sed et / ou awk.
Data control raising event
?