Powershell聚合,计算日志文件中的项目,csv输出

时间:2015-02-01 04:05:42

标签: powershell aggregate

我有一个日志文件,如下所示:

URL       Environment  
127.0.0.1 Prod  
127.0.0.1 Prod  
127.0.0.2 Test  
127.0.0.4 Prod  
127.0.0.2 Test  

现在我希望通过url然后环境进行聚合并以csv格式输出它,因此结果应该如下所示:像这样:

URL,Count
127.0.0.1, 2
127.0.0.2, 2  
127.0.0.4, 1

Environment,Count
Prod, 3
Test, 2

最好的方法是什么?
我在使用group-object和measure-object的不同线程上找到了一个解决方案,这个问题与此问题类似,但并不完全相同。

1 个答案:

答案 0 :(得分:2)

假设输入文件与屏幕上显示的完全一样,我会做这样的事情:

$inputPath = "c:\temp\test.txt"
$outputPath = "C:\temp\results.txt"

$data = Get-Content $inputPath | Select -Skip 1 | ForEach-Object{
    $splitLine = $_.split(' ',2)
    [pscustomobject][ordered] @{
        URL = $splitLine[0].Trim()
        Environment = $splitLine[1].Trim()
    }
}

$data | Group-Object URL | Select-Object @{Label="URL";Expression={$_.Name}},Count | ConvertTo-Csv -NoTypeInformation | Set-Content $outputPath
Write-Output "" | Add-Content $outputPath

获取输入文件,每行将其拆分为第一个空格,并仅返回两个元素。修剪每个拆分元素以创建一个包含URLEnvironment参数的新对象。

取出$data并将其输入Group-Object两次。一次为URL,一次为Environment。将csv格式的数据提供给$outputPath

示例输出$outputPath的内容)

"URL","Count"
"127.0.0.1","2"
"127.0.0.2","2"
"127.0.0.4","1"

"Environment","Count"
"Prod","3"
"Test","2"

我很困,所以希望我能正确读到这一个。

<强> [有序]

如果您只有PowerShell 2.0,则此关键字不存在。您可以简单地从代码中删除它,它应该在适当的位置。警告的话。 [ordered]可帮助输出显示为已编码Url,然后显示Environment。使用Select语句帐户并组织输出。如果您添加了更多字段,请不要忘记更新2 select语句。