我有一个日志文件,如下所示:
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的不同线程上找到了一个解决方案,这个问题与此问题类似,但并不完全相同。
答案 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
获取输入文件,每行将其拆分为第一个空格,并仅返回两个元素。修剪每个拆分元素以创建一个包含URL
和Environment
参数的新对象。
取出$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
语句。