2016-04-04 7 views
1

Wie man eine Protokolldatei zu lesen, um das Schlüsselwort fail und Zeitstempel von Datum dann auf csv drucken?Powershell, Hilfe lesen Log-Datei, um spezifische Schlüsselwörter zu erhalten

Beispiel: Ich habe eine Datei test.txt die

20160201-00:00:00 Success .. 
20160201-11:11:11 Fail.. 

ich einen Bericht für alle zeigt

nicht
Date   Time  Result 
---------- 
20160201  11:11:11 Fail 

Schätzen Sie Ihre Hilfe wollen

enthält!

+0

uns Zeigen Sie, was Sie versucht haben, dann sind wir mehr als glücklich Punkt, den Sie in die richtige Richtung zu helfen. – nkasco

Antwort

0

Zuerst müssen Sie die Textdatei mit dem Cmdlet Get-Content lesen. Um die Protokolle zu analysieren, können Sie die folgende Regex verwenden (Demo):

(\d{8})-(\d{2}:\d{2}:\d{2})\s+(\w+) 

Im folgenden Beispiel iterieren ich über die Spiele mit dem Foreach-Object Cmdlets (alias %) und erstellen Sie ein neues Objekt mit den gewünschten Eigenschaften. Um nur die Berichte Fail zu filtern, können Sie das Cmdlet Where-Object (alias Where) verwenden. , um das Objekt in eine CSV zu konvertieren, können Sie die Export-CSV Cmdlets verwenden können:

$content = Get-Content 'C:\Yourpathto\test.txt' 
$regex = '(\d{8})-(\d{2}:\d{2}:\d{2})\s+(\w+)' 
[regex]::Matches($content, $regex) | % { 
    [PSCustomObject]@{ 
      Date = $_.Groups.Value[1] 
      Time = $_.Groups.Value[2] 
      Result = $_.Groups.Value[3] 
      } 
} | Where Result -eq 'Fail' | Export-Csv -Path c:\test.csv 
+0

Aus irgendeinem Grund bekomme ich leere Datei. Nur um es hier einfach zu machen ist was ich in der test.txt habe. 20160401-01: 10: 00 ERFOLG 20160401-01: 10: 00 Fehler 20160401-01: 10: 00 ERFOLG 20160401-01: 10: 00 Fehler ... –

+0

dies funktioniert bei mir, ich bekomme den gewünschten Ausgang .. Haben Sie einen Fehler erhalten? –

+0

Danke! Es funktioniert Ich hatte Probleme mit Regex. :) schätze deine Hilfe. –

0

Etwas wie:

(gc log.txt) -match 'fail' | % { 
    $_ -match '^([^ ]+)(.+)' 
    $matches[1] + ',' $matches[2] | out-file -Append out.csv 
} 

Dieses sehr nahe ist, was Sie wollen, müssen Sie nur es ein bisschen polieren.

+3

Das OP sollte mindestens zeigen _some Mühe_ zeigen, bevor wir antworten. Es gibt wahrscheinlich einen Betrogenen, der diesem Titel sehr nahe kommt, was tatsächlich helfen könnte. Das liest sich wie ein Gimme die Codes Frage. Wenn der Benutzer tatsächlich neu ist, sollten Sie vermeiden, Aliase zu verwenden, wenn Sie versuchen, den Leuten zu zeigen, was zu tun ist. Sie erklären auch nicht, wie das alles funktioniert. – Matt

+0

Wenn er neu ist, ist es besser, Aliase zu verwenden, dann keine Aliase. Posh-Aliase sind keine zufälligen Wörter, sondern haben eine Geschichte in der Linux-Welt, die Wahrscheinlichkeit ist höher, dass er über 'ls' zum Beispiel dann' get-childitem' weiß. Das OP sollte auch Code lesen können, sonst ist es sinnlos. Ich möchte keinen trivialen Code erklären. – majkinetor

Verwandte Themen