Ich habe mehrere Einträge, die ein Ereignis in einer sehr großen Protokolldatei beschreiben, z . B. A.log . Ich möchte zwei Dinge mit den Ereigniseinträgen in der Protokolldatei tun :
- Zählen Sie die Anzahl der Vorkommen jedes solchen Eintrags. (Dies ist keine obligatorische Anforderung, wäre aber schön zu haben.)
- Extrahieren Sie die tatsächlichen Einträge in einer separaten Datei und studieren Sie sie später.
Ein typischer Ereigniseintrag sieht wie folgt aus und enthält andere Texte. Im folgenden Beispiel gibt es also zwei Ereigniseinträge , von denen der erste zwei DataChangeEntry
Nutzdaten und der zweite eine DataChangeEntry
Nutzlast enthält.
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, ]
]]
Bitte beachten Sie, dass die Anzahl der ==== DataChangeEntry
Zeilen in einem Ereigniseintrag variabel sein kann. Es kann auch vollständig fehlen, was auf eine Nutzlast leerer Ereignisse hinweist und eine Fehlerbedingung darstellt und definitiv auch diesen Fall erfassen möchte.
Da sich in diesem Fall die Ausgabe des Eintrags über mehrere Zeilen erstreckt, komme ich mit einfachem Vanille-Grep nicht weit. Deshalb suche ich kompetenten Rat.
PS:
- Lassen Sie mich meine Anforderungen genauer erläutern. Ich möchte den gesamten oben gezeigten Textblock wörtlich erfassen und optional die Anzahl der Instanzen solcher aufgetretenen Blöcke zählen. Die Option, die Anzahl der Instanzen zu zählen, ist gut, aber keine zwingende Voraussetzung.
- Wenn die Lösung des Problems awk verwendet, möchte ich die awk-Datei speichern und wiederverwenden. Erwähnen Sie daher bitte auch die Schritte zum Ausführen des Skripts. Ich kenne Regex und Grep, bin aber nicht mit Sed und / oder Awk vertraut.
Data control raising event
?