จะใช้ Powershell เพื่อกรองกลุ่มข้อความหลายบรรทัดจากไฟล์ได้อย่างไร


2

ฉันมีบันทึกข้อผิดพลาดที่ฉันต้องการกรองข้อผิดพลาดที่รู้จักทั้งหมดโดยใช้ Powershell ฉันรู้วิธีกรองตามบรรทัดใน PowerShell แต่ปัญหาของฉันคือข้อผิดพลาดในบันทึกข้อผิดพลาดครอบคลุมหลายบรรทัด แต่พวกเขามักจะเริ่มต้นด้วยวันที่ เช่น:

2016-01-14 01:01:01 Error 1: blab blab blab
blab blab blab line 1
blab blab blab line 2
blab blab blab line 3
2016-01-14 02:33:04 Error 2: blab blab blab
blab blab blab line 1
blab blab blab line 2
2016-01-14 02:33:04 Error 3: blab blab blab
blab blab blab line 1

และฉันต้องการกรองข้อผิดพลาด 1 และ Error3 ดังนั้นผลลัพธ์จะเป็น:

2016-01-14 02:33:04 Error 2: blab blab blab
blab blab blab line 1
blab blab blab line 2

มีวิธีง่าย ๆ ในการจัดกลุ่ม (ตามเวลาวันที่) และกรองพวกเขาโดยใช้ PowerShell?

ขอบคุณล่วงหน้า!

คำตอบ:


0

คุณสามารถใช้สิ่งนี้ สิ่งนี้สามารถใช้เพื่อกรองข้อผิดพลาดบางประเภทในหลายบรรทัดในตัวอย่างนี้ "ข้อผิดพลาด 1" หลังจากนั้นคุณสามารถเรียกใช้อีกครั้งและกรอง "ข้อผิดพลาด 3"

$content = Get-Content -Path 'C:\Temp\test.log'

# Search all the errors
$errorLines = ($content | Select-String 'Error').LineNumber

foreach ($errorLine in $errorLines) {

    $someError = $content[$errorLine-1]

    # Known error to 'filter' out
    if ( $someError -like '*Error 1*') {

       # Search for line number of next error 
       [int]$errorLineNext = ($content[($errorLine)..$content.Count] | Select-String 'Error' | Select-Object -First 1).LineNumber

       # No next errors found? Then use the total line number
       if ( $errorLineNext -eq 0 ) { $errorLineNext = ($content.Count+1) - $errorLine }

       $content.RemoveRange($errorLine-1, $errorLineNext)  
    }
}

$content | Set-Content -Path 'C:\Temp\test.log'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.