如何使用Powershell处理自定义日志数据?

时间:2017-08-05 22:12:49

标签: powershell data-processing

我有一个日志文件,其数据用" |"符号。喜欢

"Username|servername|access|password|group"
"Username|servername|access|password|group" 

我需要验证数据。并且,如果组列(记录)缺少信息或为空。我只需要将该行写入另一个文件。请帮我。在此先感谢。

3 个答案:

答案 0 :(得分:3)

如果您只是检查缺失数据,可以使用regex'(\ S + \ |){4} \ S +'进行快速检查。将Get-Content-ReadCount参数一起使用,您可以一次批量处理几千条记录,最大限度地减少磁盘I / O和内存使用量,而无需一次只记录一条记录。

Get-Content $inputfile -ReadCount 2000 |
foreach { 
          $_ -notmatch '(\S+\|){4}\S+' |
          Add-Content $outputfile
         }

答案 1 :(得分:2)

您可以将'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 '|'

答案 2 :(得分:0)

如果您的组列始终位于相同的位置(您看起来是这样),则可以使用split方法。你当然可以把代码搞砸了。我使用下面的例子来说明如何使用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" 
    }
}

希望这会有所帮助。 谢谢,蒂姆。