首页 > 解决方案 > 有没有办法在 csv 中添加与某些单元格匹配的列值?

问题描述

我已经尝试过搜索,但似乎找不到任何可能对这个有帮助的东西......我有一个 csv 文件(来自外部公司的入站),其内容如下:

Column1, Column2, Column3, Column4, etc
Bob, 61, 90, 105
Bob, 88, 21, 37
Bob, 20, 30, 40
Bill, 10, 15, 16
Bill, 90, 80, 70
Carl, 110, 115, 99
Carl, 10, 35, 90

理想情况下,我想做的是

import-csv csvfile | where { $_.Column1 is unique } | autosum column4 | insert newline | total of "bob"

所以我基本上是在 Column1 中找到一个唯一值(但它可能不是预设名称,即它可能是 Bob、Carl、Bill 或 Emma 等) - 然后添加最后一行的值其中,然后在下面输入一个包含总数的新行?

所以它可能看起来像:

Column1, Column2, Column3, Column4, etc
Bob, 61, 90, 105
Bob, 88, 21, 37
Bob, 20, 30, 40
                Bob Totals = 182
Bill, 10, 15, 16
Bill, 90, 80, 70
                Bill Totals = 86
Carl, 110, 115, 99
Carl, 10, 35, 90
                Carl Totals = 189

我希望这是有道理的,我什至不知道这是否可能,它只会节省目前从 csv 文件中添加的大量手动操作。

非常感谢您的帮助!

标签: powershellcsvvariablesmathsum

解决方案


也许这可能是一个好的开始:

$data = import-csv -path "pathtocsv" -delimiter ","

$unique_names = $data.column1 | select -unique

foreach ($unique_name in $unique_names){
    [int]$currSum = 0
    $currData = $data | ? {$_.column1 -eq $unique_name}
    foreach ($entry in $currData){
        write-host $entry
        $currSum += [int]$($entry.column4.trim())
    }
    write-host "Total for $($entry.column1): $currsum"
}

我的输出:

@{Column1=Bob; Column2=61; Column3=90; Column4=105}
@{Column1=Bob; Column2=88; Column3=21; Column4=37}
@{Column1=Bob; Column2=20; Column3=30; Column4=40}
Total for Bob: 182
@{Column1=Bill; Column2=10; Column3=15; Column4=16}
@{Column1=Bill; Column2=90; Column3=80; Column4=70}
Total for Bill: 86
@{Column1=Carl; Column2=110; Column3=115; Column4=99}
@{Column1=Carl; Column2=10; Column3=35; Column4=90}
Total for Carl: 189

您必须进行一些格式化,但基本上它按预期工作。


推荐阅读