2017-01-23 95 views
-1

我在计算(PowerShell)txt文件中以下数据的平均值时遇到了问题。从EPOCH时间戳计算PowerShell中的平均值

First row = EPOCH Time 
Second row = Response time (milliseconds) 
Third row = Name 

1451603439,297,NA 
1451603440,203,NA 
1451604606,328,OP 
1451604645,203,NA 
1451604646,234,NC 
1451604647,234,NA 
1451604647,202,NA 
1451604649,234,NA 
1451604650,187,NA 
1451604651,195,OP 
1451604652,245,NA 
1451604653,203,NA 
1451604653,218,NA 
1451604654,234,OP 
1451604655,203,NA 
1451604656,187,NA 
1451604657,156,NA 
1451604658,171,NA 
1451604658,187,NA 
1451604659,156,NA 
1451604660,218,NA

我想计算每名每天的平均响应时间。

我面对的问题是我首先必须计算正常日期的时代。 然后从一天中获取所有值并获取每个名称的平均响应时间,然后将其保存到另一个文件并重复此步骤直到文件结束。

+0

按行,您实际上是指列吗?至于如何转换历元时间取决于它是秒,毫秒还是其他。第一个值映射到1970年1月17日(ms)或2015年12月31日(秒)。 – vonPryz

+3

欢迎来到StackOverflow!这里的*实际*问题是什么,你试过了什么?正如这个“问题”所代表的,看起来你只是在等人为你写一个脚本。 StackOverflow是*不*一个免费的脚本编写服务 –

+0

您可以开始[这里](http://stackoverflow.com/questions/10781697/convert-unix-time-with-powershell)。 – sodawillow

回答

1

尝试这样的事:

$origin = New-Object -Type DateTime -ArgumentList 1970, 1, 1, 0, 0, 0, 0 

import-csv "C:\temp\file.TXT" -Header ColDate, ColNum, ColCode | 
    select ColNum, ColCode, @{N="ColDate"; E={$origin.AddSeconds($_.ColDate).Date }} | 
     group ColDate, ColCode | 
      select Name, @{N="ColAverage";E={($_.Group.ColNum | Measure-Object -Average).Average}} 
+0

出于兴趣,EPOCH时间参考是afaik主要是Utc的基础。所以平均值不是基于当地日期,而是以Utc偏移量转移的24小时周期。 +1的解决方案。 – LotPings

+0

完美,像魅力一样工作。我试图先转换 - >替换每个EPOCH时间,然后我将它分组。但这更有意义 –

0

请找到一个可行的解决方案。代码中还有一些注释,因此我们知道代码的每个部分都在做什么

#We get records from the file response.txt containing the format stuff,reponse-time,name 
$file = Get-Content response.txt 
#We create an array 
$arr = [System.Collections.ArrayList]@() 
#We will put each value separated by , into an object and will add each object in the array 
Foreach ($result in $file) { 
$tmp = $result.Split(",") 
$obj = $null 
$obj = New-Object System.Object 
$obj | Add-Member -type NoteProperty -Name stuff -Value $tmp[0] 
$obj | Add-Member -type NoteProperty -Name response -Value $tmp[1] 
$obj | Add-Member -type NoteProperty -Name name -Value $tmp[2] 
$arr += $obj 
} 
#We sort the array by name 
$arr = $arr | Sort-Object name 
$start=0 
$i = 0 
#we calculate average for each name until we reach the end of the array 
while ($arr[$start]){ 
    $counter=0 
    $tmpName=$arr[$start].name 
    $time=0 
    for($i=$start; $arr[$i].name -eq $tmpName; $i++,$counter++){ 
     $time+=$arr[$i].response 
    } 
    Write-Host "Average time for all "$counter" records with name "$tmpName" is "($time/$counter) 
    $start=$i 
}