Powershell-导入CSV组对象对分组对象中的数字求和,然后将所有分组对象合并到一行

Powershell-导入CSV组对象对分组对象中的数字求和,然后将所有分组对象合并到一行,powershell,csv,export-csv,measure-object,Powershell,Csv,Export Csv,Measure Object,我有一个类似的问题,但有一个转折点: 我的文件有42个现有的头。分隔符是标准逗号,并且此文件中没有引号 master\u账号、sub、txn、cur、last、first、address、address 2、city、state、zip、ssn、credit、email、phone、cell、workphn、dob、chrgnum、cred、max、allow、neg、plan、首付、pmt2、min、clid、cliname、owner、merch、legal、is\u active、app

我有一个类似的问题,但有一个转折点:

我的文件有42个现有的头。分隔符是标准逗号,并且此文件中没有引号

master\u账号、sub、txn、cur、last、first、address、address 2、city、state、zip、ssn、credit、email、phone、cell、workphn、dob、chrgnum、cred、max、allow、neg、plan、首付、pmt2、min、clid、cliname、owner、merch、legal、is\u active、apply、ag、offer、solution\perc、min\u pay、plan2、lstpmt、orig、placedate

文件的数据(前6列)如下所示:

master_account_number,sub,txn,cur,last,first
001,12,35,50.25,BIRD, BIG
001,34,47,100.10,BIRD, BIG
002,56,9,10.50,BUNNY, BUGS
002,78,3,20,BUNNY, BUGS
003,54,7,250,DUCK, DAFFY
004,44,88,25,MOUSE, JERRY
我只处理第一列
master\u account\u number
和第四列
cur
。 我想检查“master_account_number”列的重复项,如果找到,则将第4列“cur”中找到的重复项相加,然后对我们刚刚求和的任何行进行合并。重复数据的求和值应替换组合行中的
cur

话虽如此,我们的输出应该是这样的

master_account_number,sub,txn,cur,last,first
001,12,35,150.35,BIRD, BIG
002,56,9,30.50,BUNNY, BUGS
003,54,7,250,DUCK, DAFFY
004,44,88,25,MOUSE, JERRY
现在我们已经解决了这个问题,下面是这个问题的不同之处。我想保持输出文件中所有42列的完整性。在我上面提到的另一个问题中,输入是5列,输出是4列,这不是我想要实现的。我有太多的标题,我不想单独指定所有42列。无论如何,这似乎效率低下

至于到目前为止我对代码的了解。。。不多

$revNB = "\\server\path\example.csv"
$global:revCSV = import-csv -Path $revNB | ? {$_.is_active -eq "Y"}
$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object @{Expression={ ($_.Group|Measure-Object cur -Sum).Sum }}
最终,我希望输出看起来与输入相同,只有输出应该合并重复的帐号行,并在cur字段中添加所有“cur”值,其中合并的行包含分组cur值的总和

上次更新:尝试了Rich的解决方案,但出现错误。修改了他对这个
$dupesgroubled=$revCSV|Group Object master|u account|u number|Select Object Name,@{Name='curSum';Expression={($\ uu.Group | Measure Object cur-Sum).Sum}
这正是我自己的代码带给我的,所以我仍在寻找解决方案。我需要输出所有42个标题的CSV。即使是没有重复项的项目

我尝试过的其他事情: 这没有给我列中所需的数据,列在那里,但它们是空的

$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object @{ expression={$_.Name}; label='master_account_number' },
sub_account_number,
charge_txn,
@{Name='current_balance'; Expression={ ($_.Group | Measure-Object current_balance -Sum).Sum },
last,
}

您非常接近,但您使用了
current\u balance
,您的意思可能是
cur

这是一个开始:

$dupesGrouped = $revCSV | Group-Object master_account_number |  
Select-Object Name, @{N='curSum'; E={ ($_.Group | Measure-Object cur -Sum).Sum}, 
@{N='last'; E={ ($_.Group | Select-Object last -first 1).last} }

您可以通过添加
Name来添加其他字段;表达式
要汇总的每个字段的哈希表。我假设您希望为同一主帐户号码选择重复姓氏的第一个匹配项。如果同一主帐户号的姓氏不同,则输出将不正确

在仅更改部分数据的情况下,还有以下方法

$dupesGrouped = $revCSV | Group-Object master_account_number | ForEach-Object {

    # copy the first data in order not to change original data
    $new = $_.Group[0].psobject.Copy()    

    # update the value of cur property
    $new.cur = ($_.Group | Measure-Object cur -Sum).Sum

    # output
    $new                                  
}

看起来很接近,但由于错误而无法工作:
选择对象:“E”键的类型System.Object[]无效;预期的类型是{System.String,System.Management.Automation.ScriptBlock}。
此外,我并不关心保留哪些重复行,但我希望“curSum”在合并后进入“cur”字段。在此之后,我不再进行分组。我无法重现您的错误。你的Powershell版本是什么
$PSVersionTable
它是5.1版,因为分组后数据的结构发生了更改,所以必须从组中进行选择。42列中的每一列都需要它自己的N/E块:
{N='sub';E={($\u.Group | Select Object sub-first 1).sub},{N='txn';E={($\u.Group | Select Object txn-first 1).txn}
可能有更简单的方法,但我不知道。