Я предполагаю, что вы хотите сгруппировать общие строки в одну строку и оставить только те сгруппированные отдельные строки плюс необычные строки.
$CSVFiles = Get-ChildItem -Path D:\Exports\Test\AMAZON -File -Filter '*.csv' | Where Extension -eq '.csv'
$output = foreach ($csv in $CSVFiles) {
$csvOutput = Import-Csv $csv.FullName
$group = $csvOutput | Group-Object amazon-order-id, sku
$group | Where Count -gt 1 | Foreach-Object {
$_.Group[0].'quantity-shipped' = ($_.Group | Measure-Object quantity-shipped -Sum).Sum
$_.Group[0].'item-price' = ($_.Group | Measure-Object item-price -Sum).Sum
$_.Group[0].'item-tax' = ($_.Group | Measure-Object item-tax -Sum).Sum
$_.Group[0].'shipping-price' = ($_.Group | Measure-Object shipping-price -Sum).Sum
$_.Group[0].'shipping-tax' = ($_.Group | Measure-Object shipping-tax -Sum).Sum
$_.Group[0].'gift-wrap-price' = ($_.Group | Measure-Object gift-wrap-price -Sum).Sum
$_.Group[0].'gift-wrap-tax' = ($_.Group | Measure-Object gift-wrap-tax -Sum).Sum
$_.Group[0].'item-promotion-discount' = ($_.Group | Measure-Object item-promotion-discount -Sum).Sum
$_.Group[0].'ship-promotion-discount' = ($_.Group | Measure-Object ship-promotion-discount -Sum).Sum
}
$group | Foreach-Object { $_.Group[0] } # Output to variable only
$group | Foreach-Object { $_.Group[0] } | Export-Csv $csv.FullName -NoType
}
$output
Объяснение:
$CSVFiles
- это коллекция файлов CSV. Мы должны быть в состоянии нацелить их один за другим, чтобы знать, какой файл обновлять. Для каждого файла назначается foreach
l oop, текущим файлом является $csv
.
Поскольку $csvOutput
является содержимым файла CSV в виде массива PSCustomObjects
, мы можем обновить каждый объект с Foreach-Object
, и он будет отражен обратно в $csvOutput
.
$group
присваивается вывод Group-Object
каждого файла CSV. Использование здесь переменной сводит к минимуму группирующее действие только один раз для каждого файла. Сначала выполните модификации в каждой группе, где есть несколько совпадений. Используя вашу логику c, первый объект в группе изменяется. Foreach-Object
используется для go через все группировки.
После того, как все изменения сделаны для одного CSV-файла, выводится $group
(это включает в себя несколько и одну группировку) и только первый объект в группировка выбирается ($_.Group[0]
) с использованием другого Foreach-Object
, который также работает для группировок отдельных объектов. Эти выходные данные передаются в Export-Csv
для обновления соответствующего файла.
$output
перечисляет все содержимое CSV после изменений.