none
Zeilen aus Logdatei filtern RRS feed

  • Frage

  • Hallo,

    ich möchte aus einer Logdatei einige Zeilen ausgeben lassen. Hier zunächst mal ein Ausschnitt aus der Log Datei

    13.14:51:15.197 IsdnApl          FaxG3            I Received 2 bytes of data on handle <1>

    13.14:51:17.963 IsdnApl          FaxG3            I Incoming disconnect received on handle <1>
    13.14:51:17.963 IsdnApl          FaxG3            I Remote ID <> on handle <1>
    13.14:51:17.963 IsdnApl          FaxG3            I FG3: Send/receive baudrate <14400>
    13.14:51:38.323 IsdnApl          FaxG3            I Incoming FAXG3 call orig=<NVS:FAXG3.I0.0801/+49>  rec=<NVS:FAXG3.I0.0801/+49>  ...
    13.14:51:38.323 IsdnApl          FaxG3            I FAXG3 using ID=<+49> header=<> on handle <1>
    13.14:51:50.604 IsdnApl          FaxG3            I FaxG3NlMsg: Received Station ID '      +49'
    13.14:51:50.604 IsdnApl          FaxG3            I Connection on handle <1> is active
    13.14:51:51.057 IsdnApl          FaxG3            I Outgoing FAXG3 call orig=<NVS:> rec=<NVS:FAXG3.I0.0501/+49>, trying to get a connection (handle <11>) ...
    13.14:51:51.057 IsdnApl          FaxG3            I FAXG3 using ID=<+49> header=<> on handle <11>
    13.14:51:53.823 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:51:55.011 IsdnApl          FaxG3            I Received 1919 bytes of data on handle <1>
    13.14:51:55.901 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:51:56.808 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:51:57.542 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:51:58.448 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:51:59.339 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:52:00.230 IsdnApl          FaxG3            I Received 2048 bytes of data on handle <1>
    13.14:52:00.558 IsdnApl          FaxG3            I Incoming disconnect received on handle <11>
    13.14:52:00.558 IsdnApl          FaxG3            I Remote ID <> on handle <11>
    13.14:52:00.558 IsdnApl          FaxG3            I FG3: Send/receive baudrate <0>

    Hierbei setzt sich der erste Abschnitt folgendermaßen zusammen.

    13. ist der Tag (z. B. 13.03.2012)
    14:52:00.558 ist die Uhrzeit im Format hh:mm:ss.sss

    Ich möchte nun Zeilen ausfiltern die folgendes Beinhalten:
    Den Text "Incoming FAXG3", das ist recht einfach mit Select-String aber
    ich benötige zusätzlich noch die Zeile danach und das ganze möchte ich noch auf einen Zeitbereich beschränken.

    Also z.B: Alle Zeilen mit dem Text zwischen 14:50 und 15:30 sowie jeweils die Zeile danach.

    Ergebnis aus den Zeilen von oben:

    13.14:51:38.323 IsdnApl          FaxG3            I Incoming FAXG3 call orig=<NVS:FAXG3.I0.0801/+49>  rec=<NVS:FAXG3.I0.0801/+49>  ...
    13.14:51:38.323 IsdnApl          FaxG3            I FAXG3 using ID=<+49> header=<> on handle <1>

    Leider habe ich keinen Plan wie ich das mit der Uhrzeit machen kann.

    Donnerstag, 15. März 2012 16:32

Antworten

  • Hallo Armin,

    danke für die schnelle Antwort. Das ist genau das was ich brauche. Ich habe jetzt noch meine Abfrage hinzugefügt und dann sieht das ganze so aus:

    $LogInfo = @()
    
    $FAXLog = Get-Content "D:\temp\FAXG3Info.log"
    
    Foreach ($LogLine In $FaxLog)
    {
        $LogTime = $LogLine.substring(3, 5)
        
        If ($LogTime -gt "14:50" -and $LogTime -le "14:55")
        {
            $LogInfo += $LogLine
        }
    }
    
    $LogInfo | Select-String -pattern "Incoming FAXG3" -Context 0,1 

    Das liest jetzt alle Zeilen aus die Zwischen 14:50 und 14:55 sind und danach wird der Inhalt nach dem Substring durchsucht.

    Gruß

    Bernhard

    Freitag, 16. März 2012 13:09

Alle Antworten

  • Hallo,

    versuch mal folgendes, sollte eigentlich funktionieren (natürlich musst Du Deine Selection noch mit einfliesen lassen.

    $x = get-content "c:\test.txt"

    Foreach ($i In $x)        
    {
    $uhrzeit = $i.substring(3,5)
    if ($uhrzeit -gt "14:50" -and $uhrzeit -le "15:30")
    {
    $uhrzeit | Out-File c:\ausgabe.txt -append
    }
    }

    Gruß

    Armin

              
    Freitag, 16. März 2012 11:10
  • Hallo Armin,

    danke für die schnelle Antwort. Das ist genau das was ich brauche. Ich habe jetzt noch meine Abfrage hinzugefügt und dann sieht das ganze so aus:

    $LogInfo = @()
    
    $FAXLog = Get-Content "D:\temp\FAXG3Info.log"
    
    Foreach ($LogLine In $FaxLog)
    {
        $LogTime = $LogLine.substring(3, 5)
        
        If ($LogTime -gt "14:50" -and $LogTime -le "14:55")
        {
            $LogInfo += $LogLine
        }
    }
    
    $LogInfo | Select-String -pattern "Incoming FAXG3" -Context 0,1 

    Das liest jetzt alle Zeilen aus die Zwischen 14:50 und 14:55 sind und danach wird der Inhalt nach dem Substring durchsucht.

    Gruß

    Bernhard

    Freitag, 16. März 2012 13:09