作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是Powershell的新手。需要CSV自动化逻辑。我有一个包含大量API调用的CSV日志文件。
我需要一行一行地分离数据,输出应如下所示。 call 总数和要更新的平均响应时间。
我为不同类型的API调用编写了复杂的If if条件,并且能够从csv中获取方案名称和其他值。我的痛苦从这里开始,努力得出结论,继续前进。我可以创建一个数组并存储所有值,然后稍后进行所有计算,还是将值写入另一个csv中,然后进行所有计算以找到计数和平均响应时间?
如果我选择数组,则场景不应重复。对我来说,在不知道可用的cmdlet用于数组和CSV的情况下,很难做出决定。请给点灯..
提前致谢...
最佳答案
这是一种可以结合使用Powershell可用的C#的方法(可以更高效地处理较大的文件和数据)。
第一个组件是您需要一些一致的逻辑来隔离要分配每个URL的API类别。从屏幕截图中,有时似乎您使用的是URL的最后一段,而其他则是资源中间的某些路径。
这只是一种快速的方法,您可以传入类别数组,如果可以通过任何方式将其与URI匹配,则将使用该类别。否则,URI代表其自己的类别。请在此处用您想要的任何逻辑替换。
function Get-ApiCategory {
param([string[]] $Categories, [string] $Text)
foreach ($c in $Categories) {
if ($Text.IndexOf($c) -gt 0) {
return $c
}
}
return $Text # Not found
}
function Write-SummaryToFile {
param([string[]] $Categories, [string] $InputFile, [string] $Output)
# Parse the file line-by-line (optimize for memory)
$result = @{}
$lineNum = 0
Write-Host $InputFile
foreach ($line in [System.IO.File]::ReadLines($InputFile)) {
if ($lineNum++ -lt 1) { continue } # Skip header
$cols = $line.Split(',')
$category = Get-ApiCategory $Categories $cols[0]
$new = @{
Category = $category
Count = [int]$cols[1]
AvgResponse = [double]$cols[2]
}
if ($result.ContainsKey($category)) {
$weighted = $result[$category].AvgResponse * $result[$category].Count
$result[$category].Count += $new.Count
$result[$category].AvgResponse = ($weighted + $new.AvgResponse * $new.Count) / $result[$category].Count;
} else {
$result[$category] = $new
}
}
# Output to file
if (Test-Path $Output) { Remove-Item $Output }
try {
$stream = [System.IO.StreamWriter] $Output
$stream.WriteLine('Scenario,Count,Avg_Response_Time')
$result.Values | ForEach-Object { $stream.WriteLine([string]::Format("{0},{1},{2}", $_.Category, $_.Count, $_.AvgResponse.ToString("0.##"))) }
}
finally {
$stream.Dispose()
}
}
$categories = @('MoveRequestQueue', 'DeliveryDate')
Write-SummaryToFile $categories 'c:\dev\scratch\ps1\test.csv' 'C:\dev\scratch\ps1\Output.csv'
关于powershell - 遍历CSV并创建一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59360692/
我是一名优秀的程序员,十分优秀!