Wie parst du eine sysmon-Datei, um bestimmte Informationen mit R zu extrahieren?

8

Ich versuche, eine Menge dieser Art von Dateien mit R zu lesen, um die Informationen auszuwerten und die Daten in ein Datenrahmen-ähnliches Format zu bringen:

Dies ist der Inhalt der Datei:

%Vor%

Ich muss "Jul 4 2016 7:21 AM" als Datum erfassen, aus der Zeile "Engine Utilization (Tick%)", Server Summary - & gt; Average "4.2%"

Aus dem Abschnitt "Transaktionsprofil" - & gt; Transaktionsprofil "count" -Eintrag.

Also sollte mein Datenrahmen ungefähr so ​​aussehen:

%Vor%

Kann mir jemand helfen, diese Datei zu parsen, um diese Ausgabe zu erhalten?

Ich habe so etwas versucht:

%Vor%

um diese Zeile zu erhalten:

%Vor%

Aber ich möchte in der Lage sein, nur nach

Durchschnitt zu extrahieren

Engine Utilization (Tick%), da viele Zeilen mit Average beginnen können. Die Durchschnittslinie, die direkt nach der Verwendung der Engine (Tick%) angezeigt wird, ist diejenige, die ich möchte.

Wie lege ich das in diese Zeile, um diese Information aus dieser Datei zu extrahieren:

%Vor%

Kann ich grep in dieser Zeile lesen, um nach bestimmten Zeichen zu suchen?

    
user1471980 03.08.2016, 20:35
quelle

4 Antworten

2

%%%% Shot 1 - hat etwas funktioniert

%Vor%

%%% Shot 2: Erster Versuch, eine (möglicherweise variable) Anzahl von Geräte-Spalten zu extrahieren

%Vor%

%%%%%%%%% Shot 3: extrahiere zwei Tabellen, eine mit einer einzelnen Zeile und eine zweite mit einer variablen Anzahl von Zeilen (abhängig davon, welche Geräte in jeder sysmon-Datei aufgelistet sind).

%Vor%     
renato vitolo 17.08.2016, 19:38
quelle
2

Das Manipulieren von Textdateien kann manchmal mit dedizierten Programmen einfacher sein. Z.B. gawk wurde speziell zum Suchen von Mustern in Textdateien und zum Ausgeben von Daten daraus entwickelt. Wir können ein kurzes Gawk-Skript verwenden, um die benötigten Daten in R zu laden. Beachten Sie, dass jede Zeile des Skripts aus einem Muster besteht, nach dem gesucht werden soll, gefolgt von einer Aktion in {} . NR ist ein Zähler, der die Anzahl der bisher gelesenen Zeilen zählt.

%Vor%

Speichern Sie dieses Skript mit dem Namen "ext.awk" und extrahieren Sie dann alle Datendateien in einen R-Datenrahmen (vorausgesetzt, sie befinden sich alle in einem Ordner und haben die Erweiterung .txt ) mit

%Vor%

NB, gawk ist in den meisten Linux-Versionen bereits installiert. Unter Windows müssen Sie es möglicherweise von http://gnuwin32.sourceforge.net/packages/gawk.htm

installieren     
dww 17.08.2016 21:08
quelle
0

Zum Lesen der Dateien Hier nehme ich CSV als Dateityp an. Für andere besuchen Sie bitte   Ссылка

%Vor%

== & gt; merge akzeptiert nur zwei Argumente

%Vor%

Jetzt haben Sie alle Spalten im Datenrahmen

%Vor%

Sie können alle Spalten im Datenrahmen sehen

Extrahieren Sie die Spalten wie gewünscht == & gt; Die Funktion subset () ist der einfachste Weg, Variablen und Beobachtungen auszuwählen

%Vor%

Jetzt können Sie es in CSV oder einen beliebigen Dateityp schreiben

%Vor%

Zum Zusammenführen aller Dateien

%Vor%

Nachdem Sie den Code zum Definieren der Funktion ausgeführt haben, können Sie ihn verwenden. Die Funktion nimmt einen Pfad. Dieser Pfad sollte der Name eines Ordners sein, der alle Dateien enthält, die Sie zusammen lesen und zusammenführen möchten, und nur die Dateien, die Sie zusammenführen möchten. In diesem Sinne habe ich zwei Tipps:

Bevor Sie diese Funktion verwenden, ist es mein Vorschlag, einen neuen Ordner in einem kurzen Verzeichnis anzulegen (zum Beispiel könnte der Pfad für diesen Ordner "C: // R // mergeme" lauten) und alle Ihre Dateien speichern möchte in diesem Ordner zusammenführen. Stellen Sie außerdem sicher, dass die Spalte, die den Abgleich durchführt, auf die gleiche Weise (und mit demselben Namen) in jeder der Dateien formatiert ist. Angenommen, Sie haben Ihre 20 Dateien im Mergeme-Ordner unter "C: // R // mergeme" gespeichert und möchten sie lesen und zusammenführen. Um meine Funktion zu verwenden, verwenden Sie die folgende Syntax:

%Vor%

Nachdem Sie diesen Befehl ausgeführt haben, verfügen Sie über einen vollständig zusammengesetzten Datenrahmen, bei dem alle Ihre Variablen aufeinander abgestimmt sind

Jetzt können Sie den Datenrahmen gemäß den erforderlichen Spalten unterteilen.

    
Nayan Sharma 03.08.2016 21:27
quelle
0

Verwenden Sie readLines oder stringi::stri_read_lines , um den Inhalt der Datei als Zeichenvektor zu lesen. Letzteres ist typischerweise schneller, aber nicht so ausgereift und bricht gelegentlich mit ungewöhnlichem Inhalt.

%Vor%

Für schnelles reguläres Expression-Matching ist stringi normalerweise die beste Wahl. Mit rebus.datetimes können Sie einen regulären Ausdruck aus einer strptime Datumsformat-Zeichenfolge generieren.

Das aktuelle Ausführungsdatum finden

Die Zeile, in der current_run erscheint, wird gefunden mit:

%Vor%

Um die Daten zu extrahieren, schaut dieser Code nur auf die zweite Zeile nach der Zeile, in der der aktuelle Lauf gefunden wurde, aber der Code ist vektorisierbar, so dass Sie alle Zeilen leicht betrachten können, wenn Sie Dateien haben, für die diese Annahme nicht gilt halten.

%Vor%

Den% Benutzer beschäftigt finden

Der Abschnitt "Engine Utilization" wird über

gefunden %Vor%

Wir wollen die erste Instanz von "Server Summary", die hinter dieser Zeile steht.

%Vor%

Verwenden Sie einen regulären Ausdruck, um die Zahl aus der nächsten Zeile zu extrahieren.

%Vor%

Anzahl der festgeschriebenen xacts finden

Die Zeile "Committed Xacts" ist

%Vor%

Der Zählwert besteht aus einer Reihe von Ziffern, die vom Leerzeichen umgeben sind.

%Vor%

Kombinieren der Ergebnisse

%Vor%     
Richie Cotton 23.08.2016 12:12
quelle

Tags und Links