Home > Software engineering >  PowerShell group object Cumulative / Running total
PowerShell group object Cumulative / Running total

Time:01-06

My data looks like below

 Name   Numbers
 Bob    1
 Bob    1
 Bob    0
 Tom    1
 Tom    0
Steve   0
Steve   1

Would like the end result to look like this:

Name    Numbers Total numbers
Bob     1        1
Bob     1        2
Bob     0        2
Tom     1        1
Tom     0        1
Steve   0        0
Steve   1        1

I have tried group Object -

Import-Csv 'C:\New folder\test.txt' | Group-Object Pitcher |
Select-Object Name, Numbers, @{ n='Total numbers'; e={ ($_.Group.Numbers) } }

And also this:

$csvfile='C:\New folder\test.txt'
$csvlength = (Get-Content "C:\New folder\test.txt").length
[int]$Sum = 0`
$csv=Import-csv -Path $csvfile -ea 0 | Sort-Object Name
for($i=0; $i -lt $csvlength; $i  ) {``foreach($row in $csv){ 
    if($previous){
        if($previous.Name -eq $row.Name){
            $Sum  = $row.Numbers
        }
    }
    $previous = $row
}

CodePudding user response:

Assuming this is a Csv you can use a hash table to keep track of each Total Count for each value in Name then construct a new object using a calculated property:

$map = @{}
Import-Csv $csvPath | ForEach-Object {
    $map[$_.Name]  = $_.Numbers -as [int]
    $_ | Select-Object *, @{N='Total numbers'; E={ $map[$_.Name] }}
}

Output should look like this using the example data:

Name  Numbers Total numbers
----  ------- -------------
Bob   1                   1
Bob   1                   2
Bob   0                   2
Tom   1                   1
Tom   0                   1
Steve 0                   0
Steve 1                   1
  • Related