根据列的内容合并 .CSV 行 - 对另一列求和
Merge .CSV-rows based on a column's content - sum another colum
我已经设法从多个文件中导出了一些数据,并使用 PowerShell 中的 Export-Csv
命令创建了一个 .csv。我当前的 .csv 文件现在看起来像这样:
CA;ArtNr;Menge;CD;CE;CF;CG;CH
RN;42450;7;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
现在,在最后一步中,我想合并列 CB
中具有相同值的所有行,并将它们的值相加 CC
。
所以我想要的结果是:
CA;ArtNr;Menge;CD;CE;CF;CG;CH
RN;42450;13;H;10200;some Text;another column;more text
RN;72250;4;H;10200;some Text;another column;more text
任何人都可以帮助我(以 PowerShell-newby-freindly 方式)?
提前致谢!
编辑
如果我将您的代码调整为脚本以将其添加为下一步,它只会给我一个空的 .csv 文件。
$csv = "X:\folder\file.name.csv" | ConvertFrom-Csv -Delimiter ';'
$csv | Group-Object ArtNr | ForEach-Object {
$_.Group[0].Menge = ($_.Group.Menge | Measure-Object -Sum).Sum
$_.Group[0]
}
$csv | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
我做错了什么?
这是您可以做到的一种方法。这将采用每个组的第一个值,但是,如我的评论所示,如果每个组的每个项目的值不相同(不包括 CB 和 CC),您需要具体说明如何处理。
$csv = @'
CA;CB;CC;CD;CE;CF;CG;CH
RN;42450;7;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
'@ | ConvertFrom-Csv -Delimiter ';'
$csv | Group-Object CB | ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
结果如下所示:
CA CB CC CD CE CF CG CH
-- -- -- -- -- -- -- --
RN 42450 13 H 10200 some Text another column more text
RN 72250 4 H 10200 some Text another column more text
编辑:
如果您从 CSV 文件中导入数据,它将如下所示:
$csv = Import-Csv "X:\path\to\file.csv" -Delimiter ';'
$csv | Group-Object CB | ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
或者您可以直接将导入通过管道传递给脚本,如下所示:
Import-Csv "X:\path\to\file.csv" -Delimiter ';' | Group-Object CB |
ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
我已经设法从多个文件中导出了一些数据,并使用 PowerShell 中的 Export-Csv
命令创建了一个 .csv。我当前的 .csv 文件现在看起来像这样:
CA;ArtNr;Menge;CD;CE;CF;CG;CH
RN;42450;7;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
现在,在最后一步中,我想合并列 CB
中具有相同值的所有行,并将它们的值相加 CC
。
所以我想要的结果是:
CA;ArtNr;Menge;CD;CE;CF;CG;CH
RN;42450;13;H;10200;some Text;another column;more text
RN;72250;4;H;10200;some Text;another column;more text
任何人都可以帮助我(以 PowerShell-newby-freindly 方式)?
提前致谢!
编辑 如果我将您的代码调整为脚本以将其添加为下一步,它只会给我一个空的 .csv 文件。
$csv = "X:\folder\file.name.csv" | ConvertFrom-Csv -Delimiter ';'
$csv | Group-Object ArtNr | ForEach-Object {
$_.Group[0].Menge = ($_.Group.Menge | Measure-Object -Sum).Sum
$_.Group[0]
}
$csv | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
我做错了什么?
这是您可以做到的一种方法。这将采用每个组的第一个值,但是,如我的评论所示,如果每个组的每个项目的值不相同(不包括 CB 和 CC),您需要具体说明如何处理。
$csv = @'
CA;CB;CC;CD;CE;CF;CG;CH
RN;42450;7;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
RN;72250;2;H;10200;some Text;another column;more text
RN;42450;3;H;10200;some Text;another column;more text
'@ | ConvertFrom-Csv -Delimiter ';'
$csv | Group-Object CB | ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
结果如下所示:
CA CB CC CD CE CF CG CH
-- -- -- -- -- -- -- --
RN 42450 13 H 10200 some Text another column more text
RN 72250 4 H 10200 some Text another column more text
编辑:
如果您从 CSV 文件中导入数据,它将如下所示:
$csv = Import-Csv "X:\path\to\file.csv" -Delimiter ';'
$csv | Group-Object CB | ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation
或者您可以直接将导入通过管道传递给脚本,如下所示:
Import-Csv "X:\path\to\file.csv" -Delimiter ';' | Group-Object CB |
ForEach-Object {
$_.Group[0].CC = ($_.Group.CC | Measure-Object -Sum).Sum
$_.Group[0]
} | Export-Csv -Path "x:\folder\file.name.new.csv" -Delimiter ";" -NoTypeInformation