我有CSV文件。 CSV的每一行都有一个时间戳,以及当时记录的各种性能指标。
我想要做的就是使用csv并对它进行逻辑测试:
如果所述指标在指定的时间内超过指定的阈值= True
我可以轻松设置一个比较两个数字/指标的逻辑语句,但我不知道如何在一段时间内添加该条件是否为真。
CSV可能如下所示:
time,KB/sec,IOPS,Avg. Latency ms 8/6/2017 10:30,10616.79606,117.2243058,35.63250298 8/6/2017 10:20,11337.82872,149.4084982,28.55670254 8/6/2017 10:17,12276.47016,172.2729097,25.43457276 8/6/2017 10:14,10125.01863,106.2432985,37.38492431 8/6/2017 10:11,12185.1857,127.452136,32.40784617
所以我可能想知道延迟是否持续一段时间超过一定时间,例如
我可以使用一点方向,非常感谢任何人都能提供的任何帮助。
答案 0 :(得分:0)
首先,您需要将CSV中的值从字符串转换为正确的类型(分别为DateTime
和double
)。
Import-Csv 'C:\path\to\your.csv' | ForEach-Object {
$_.time = [DateTime]$_.time
$_.'KB/sec' = [double]$_.'KB/sec'
$_.IOPS = [double]$_.IOPS
...
}
检查相关值是否高于给定阈值。您有3个案例要涵盖:
该值首次超过阈值:记住当前时间戳。
该值超过阈值并且在上一次迭代中也超过了它:计算当前时间戳与先前记住的时间戳之间的差异。如果时间跨度大于您要接受的最长持续时间,请返回$true
。
该值未超过阈值:忘记以前记住的时间戳。
答案 1 :(得分:0)
不知道你的目标是什么,也许下面的内容会有所帮助。
function Monitor-Something
{
Param
(
$Date = '8/6/2017',
$StartTime = '10:17',
$StopTime = '10:30',
$Threshold,
$CSVLogfile = 'C:\temp\test.csv'
)
Begin
{
}
Process
{
$csv = Import-Csv $CSVLogfile
[datetime]$monitorStart = $("$Date $StartTime")
[datetime]$monitorStop = $("$Date $StopTime")
foreach($item in $csv)
{
[datetime]$objDateTime = $item.time
if($objDateTime -gt $monitorStart -and $objDateTime -lt $monitorStop)
{
#do stuff here, compare against your threshold report things build an object for an output
$item.IOPS #This is here just to show you a successful result
}
}
}
End
{
#return some report or object that you can analyze
}
}