我有一个与此类似的问题,但有一点不同: CSV 中的 Powershell Group Object and exporting it
我的文件有 42 个现有标题。分隔符是标准逗号,此文件中没有引号。
master_account_number,sub,txn,cur,last,first,address,address2,city,state,zip,ssn,credit,email,phone,cell,workphn,dob,chrgnum,cred,max,allow,neg,plan,downpayment,pmt2,min,clid,cliname,owner,merch,legal,is_active,apply,ag,offer,settle_perc,min_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_account_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 的解决方案,但出现错误。修改了他对此所做的事情$dupesGrouped = $revCSV | Group-Object master_account_number | Select-Object Name, @{Name='curSum'; Expression={ ($_.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,
}