我有一個日誌文件,其數據以「|」分隔符號。像如何使用Powershell處理自定義日誌數據?
"Username|servername|access|password|group"
"Username|servername|access|password|group"
我需要驗證數據。而且,如果組列(記錄)缺少信息或爲空。我只需要將該行寫入另一個文件。請幫幫我。提前致謝。
我有一個日誌文件,其數據以「|」分隔符號。像如何使用Powershell處理自定義日誌數據?
"Username|servername|access|password|group"
"Username|servername|access|password|group"
我需要驗證數據。而且,如果組列(記錄)缺少信息或爲空。我只需要將該行寫入另一個文件。請幫幫我。提前致謝。
你可以使用'Import-CSV
與-Delimiter '|'
。如果您的文件沒有標題行,則還需要使用-Header
來定義它。然後,您可以使用Where
來再次過濾空羣組行,並使用Export-CSV
再次對-Delimiter
進行過濾,以創建僅包含這些行的新文件。
例如:
Import-CSV 'YourLog.log' -Delimiter '|' -Header 'Username','Servername','Access','Password','Group' |
Where {$_.'Group' -eq ''} |
Export-CSV 'EmptyGroupLines.log' -Delimiter '|'
如果您的組列始終位於相同的位置,它看起來是這樣,您可以使用拆分方法。你當然可以把代碼打包起來。我已經用下面的例子來說明如何使用split。
foreach語句是遍歷文件中的每一行。 if(!$($ groupstring.Split('|')[4]))檢查它是否爲空。
$groupstring = 'Username|servername|access|password|group'
$groupstring.Split('|')[4]
foreach ($item in $collection)
{
if (!$($groupstring.Split('|')[4]))
{
Write-Host "variable is null"
}
}
希望這會有所幫助。 謝謝,蒂姆。
謝謝你的答案蒂姆,我會盡力和我的結果回來。 – Subhantech
不用擔心Subhantech。看着我的回答,我沒有做出你所要求的整個產品的出口。馬克Wragg和@mjoliner看起來像很好的答案。 –
不,不,蒂姆,我很感謝你的回答。對我來說,沒有確定的答案,因爲我正在驗證所有的可能性。而且,我也在嘗試你的解決方案。這很好。我做的第一個方法是分割方法。這就是爲什麼我沒有立即檢查你的解決方案。我喜歡馬克的答案,因爲它爲我工作。但是,還有很長的路要走。由於我的腳本很大,我正在學習所有的可能性。我給出的例子只是我想要的摘要。 – Subhantech
如果您只是檢查丟失的數據,可以使用'(\ S + \ |){4} \ S +'的regex
進行快速檢查。使用Get-Content
和-ReadCount
參數,您可以一次批量處理幾千條記錄,最大限度地減少磁盤I/O和內存使用量,而無需一次處理一條記錄。
Get-Content $inputfile -ReadCount 2000 |
foreach {
$_ -notmatch '(\S+\|){4}\S+' |
Add-Content $outputfile
}
謝謝你的答案Miolinor,我會盡力回覆我的結果。 – Subhantech
謝謝您的答覆,我會盡力回覆我的結果。 – Subhantech