После группировки по ID
с Group-Object
вы можете выполнить итерацию каждой группы и создать новую System.Management.Automation.PSCustomObject
со свойствами, которые вы хотите экспортировать в выходной CSV-файл ,
Для ID
мы просто используем ключ группировки. Name
и Duration
мы выбираем первый объект, у которого нет $null
или пустой версии этого свойства, используя System.String.IsNullOrEmpty()
. Для Start_Call
и End_Call
мы выбираем объект, который имеет эти значения для свойства Call_Type
.
Фильтрация выполняется Where-Object
. Чтобы получить первую и расширенную версии свойств, мы также используем -First
и -ExpandProperty
из Select-Object
.
$csv = Import-Csv -Path .\data.csv -Delimiter ";"
$groups = $csv | Group-Object -Property ID
& {
foreach ($group in $groups)
{
[PSCustomObject]@{
ID = $group.Name
Name = $group.Group | Where-Object {-not [string]::IsNullOrEmpty($_.Name)} | Select-Object -First 1 -ExpandProperty Name
Duration = $group.Group | Where-Object {-not [string]::IsNullOrEmpty($_.Duration)} | Select-Object -First 1 -ExpandProperty Duration
Start_Call = $group.Group | Where-Object {$_.Call_Type -eq "Start_Call"} | Select-Object -First 1 -ExpandProperty DateTime
End_Call = $group.Group | Where-Object {$_.Call_Type -eq "End_Call"} | Select-Object -First 1 -ExpandProperty DateTime
}
}
} | Export-Csv -Path .\output.csv -Delimiter ";" -NoTypeInformation
output.csv
"ID";"Name";"Duration";"Start_Call";"End_Call"
"1234509";"Mike";"600";"2020-01-02T01:22:33";"2020-01-02T01:32:33"
Если вы хотите удалить кавычки из файла CSV, вы можете использовать переключатель -UseQuotes
из Export-Csv
. Однако для этого требуется PowerShell 7 . Если вы используете более раннюю версию PowerShell, вы можете использовать некоторые рекомендации из Как удалить все кавычки в файле csv с помощью сценария powershell? .