Объединить строки .CSV на основе содержимого столбца — суммировать другой столбец

Мне удалось экспортировать некоторые данные из нескольких файлов и создать один файл .csv с помощью команды Export-Csv в PowerShell. Мой текущий файл .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)?

Заранее спасибо!

ИЗМЕНИТЬ Если я внесу ваш код в скрипт, чтобы добавить его в качестве следующего шага, он просто даст мне пустой файл .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

Что я делаю неправильно?


person Nerevar.de    schedule 18.05.2021    source источник
comment
Остальные столбцы всегда будут содержать одни и те же значения? Если нет, как должен выглядеть объект результата?   -  person Santiago Squarzon    schedule 18.05.2021


Ответы (1)


Вот один из способов сделать это. Это будет принимать первое значение каждой группы, однако, как в моем комментарии, если значения не будут одинаковыми для каждого элемента каждой группы (за исключением 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
person Santiago Squarzon    schedule 18.05.2021
comment
Спасибо за вашу попытку. Я только что добавил некоторый код в свой вопрос, в котором я пытаюсь использовать его для файла, поскольку позже я внедрим его в свой скрипт. Не могли бы вы сказать мне, что я делаю неправильно, так как мой результат - .csv просто пуст? Примечание. Я также добавил два имени столбца, которые на самом деле использую, чтобы показать, что в них нет никаких символов. - person Nerevar.de; 18.05.2021
comment
@ Nerevar.de Я отредактировал код, вы можете просто передать результат цикла foreach напрямую в Export-Csv. Если вы хотите сначала сохранить результат, а затем экспортировать, вы можете сделать $result = $csv | Group-Object CB....., а затем $result | Export-Csv ...... - person Santiago Squarzon; 18.05.2021
comment
2bh Я все еще получаю результат пустого файла. Правильно ли я открываю файл? Поскольку это единственная другая часть по сравнению с вашим кодом (потому что у вас есть данные примера исправления). EDIT: Это работает, если я использую фиксированные данные примера. Так что я думаю, что это то, как я открываю файл. - person Nerevar.de; 18.05.2021
comment
@ Nerevar.de Вы никогда не показывали, как открываете файл. Вы проверили, что переменная, в которой вы храните результат Import-Csv, имеет данные? - person Santiago Squarzon; 18.05.2021
comment
Это в моем вопросе. Первая строка после EDIT - person Nerevar.de; 18.05.2021
comment
Хорошо. Теперь я на 100% уверен, что пытался открыть его неправильно. 2bh Я до сих пор не знаю, что я сделал не так при открытии и как это должно быть, но мне удалось внедрить ваш код в скрипт, создающий файл, и он работает, как задумано. Большое спасибо @Santiago Squarzon - person Nerevar.de; 18.05.2021
comment
@ Nerevar.de посмотрите последнее редактирование моего ответа, надеюсь, это имеет смысл :) - person Santiago Squarzon; 18.05.2021