Powershell:如何从csv中删除0并将合并行合并在一起

时间:2017-02-08 08:09:43

标签: powershell csv foreach merge

我对Powershell Scripting有点新鲜。我写了一个小脚本,它报告来自几个集群的统计数据并将它们导出到.csv文件中。

CSV File

Get-Cluster | Foreach-object {
$cluster=$_
Write-Host "Récupération des données en cours depuis $cluster"   

#Récupération des toutes les stats
$stat = Get-Stat -Entity $cluster -Stat mem.usage.average,cpu.usage.average -Start $start | Select-Object -Property entity, metricid, timestamp, value, unit

#$stats = Get-Stat -Entity  SDCVSLB01 -Stat mem.usage.average,cpu.usage.average -Start (Get-Date).Adddays(-1)| Select-Object -Property value, MetricID -first 10

#Séparation des stats récupération des pics de consomation et metricid
$CPUStats = $stat | Where-Object {$_.Metricid -eq "cpu.usage.average"} | Sort-Object -Property Value -Descending | Select-Object -Property entity, metricid, timestamp, value, unit -first 15

$MemStats = $stat | Where-Object {$_.Metricid -eq "mem.usage.average"} | Sort-Object -Property Value -Descending | Select-Object -Property entity, metricid, timestamp, value, unit -first 15




$stats_metric = $CPUStats, $MemStats

#fonction ecart-type qui ressort l'ET avec les nombres entrées
  function get-EcartType ($i) {            

            $numbers = $i
            $avg = $numbers | Measure-Object -Average | select Count, Average            

            $popdev = 0            

            foreach ($number in $numbers){            
              $popdev +=  [math]::pow(($number - $avg.Average), 2)            
            }            

            $sd = [math]::Round([math]::sqrt($popdev / ($avg.Count-1)),2)            
            $sd   

    }

foreach ($element in $stats_metric) {

Write-Host 
  #création de l'objet pour exporter l 'ET
  $element | Group-Object -Property entity | %{ 
        [pscustomobject]@{
            Cluster=$_.Group[0].entity
            Moyenne_Max_CPU = [math]::Round(($_.Group  | Where-Object {$_.Metricid -eq "cpu.usage.average"} | Measure-Object -Property Value -Average ).Average, 2)
            Moyenne_Max_Mem = [math]::Round(($_.Group  | Where-Object {$_.Metricid -eq "mem.usage.average"} | Measure-Object -Property Value -Average ).Average, 2)
            Metric = $_.Group[0].MetricID
            EcartType_CPU= get-EcartType $stats_metric[0].value
            EcartType_Mem= get-EcartType $stats_metric[1].value



        }

 }| Export-Csv -Path $FSortie -Append -UseCulture -noType 

(EcartType表示标准派生)

正如您所看到的,每个群集我有2行,我想只得到一行。

最好的修复方法是删除空块(带有0的块)并将剩余块合并为一行。

我认为我的错误来自foreach循环,但我不知道如何解决它,而且我缺乏发展技能。

0 个答案:

没有答案