windows - Hvordan grupperer jeg og summerer CSV rækker med delt kolonneværdi?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg er ny med powershell, og jeg er i øjeblikket sidder fast med et problem.


Jeg importerer en CSV-fil med 2 kolonner (Servernavn og Størrelse)
sådan her :


Server | Size
-------------
SRV1   | 140

SRV2   | 120

SRV1   | 100

SRV1   | 140

SRV2   | 200


Jeg vil gerne tilføje alle størrelsesværdier for hver server, for eksempel:


SRV2 = 120+200
SRV1 = 140+100+140


Jeg har ingen idé om, hvordan man gør det.
Jeg prøvede med en for loop, men operationen er udført for hver linje, så mine resultater er falske.
Kan nogen hjælpe mig?

Bedste reference


Brug:



  • Group-Object cmdlet til at gruppere CSV rækkerne efter servernavn (Server)

  • brug derefter Select-Object til at konstruere et enkelt outputobjekt pr. gruppe ,

  • indeholdende servernavnet og summen for alle de tilhørende rækker 'Size værdier opnået via en beregnet egenskab, der bruger cmdlet Measure-Object:





Import-Csv file.csv | Group-Object Server | 
  Select-Object Name, @{ n='Size'; e={ ($\_.Group | Measure-Object Size -Sum).Sum } }


Hvis du vil have den første udgangskolonne navngivet Server, skal du erstatte Name med @{ n='Server'; e='Name' } [14] [15] [17]


Med dine prøvedata giver ovennævnte udbytte:


Name Size
---- ----
SRV1  380
SRV2  320

Andre referencer 1


Her er et eksempel på hvordan du kan gøre det:


$Data = Import-Csv -Path "yourfilepath" -Delimiter ";"

$SortedData = $Data | Group {$\_.server}
$Hashtable = @{}
$SortedData.group | ForEach-Object {
    if ($Hashtable.Contains($\_.server)) {
        $Hashtable[$\_.server] += ",$($\_.size)"
    } else {
        $Hashtable.Add($\_.server,$\_.size)
    }
}


Du skal ændre din afgrænsning i dit tilfælde