PowerShell CSV-Datei in bestimmtes Format umwandeln
Hallo Zusammen,
Der Inhalt einer CSV-Datei soll in eine Matrix überführt werden.
Leider komme ich mit PowerShell hier nicht weiter. Mit Excel ist es machbar, aber ich möchte es doch lieber komplett in PowerShell bearbeiten.
So sieht meine CSV-Datei aus:
"USER1","APP1 APP4 APP5"
"USER2","APP1 APP2"
"USER3","APP6 APP7"
"USER4","APP3 APP4"
"USER5","APP1 APP9"
"USER6","APP9"
Nun würde ich diese gerne folgendermaßen umwandeln:
LOGIN;APP1;APP2;APP3;APP4;APP5;APP6;APP7;APP8;APP9
"USER1";X;;;X;X;;;;;;
"USER2";X;X;;;;;;;;;
"USER3";;;;;;X;X;;;;
"USER4";;;X;X;;;;;
"USER5";X;;;;;;;;X
"USER6";;;;;;;;;X
Über jede Anregung, wie dies in PowerShell möglich wäre, würde ich mich freuen.
Gruß
Willi
Der Inhalt einer CSV-Datei soll in eine Matrix überführt werden.
Leider komme ich mit PowerShell hier nicht weiter. Mit Excel ist es machbar, aber ich möchte es doch lieber komplett in PowerShell bearbeiten.
So sieht meine CSV-Datei aus:
"USER1","APP1 APP4 APP5"
"USER2","APP1 APP2"
"USER3","APP6 APP7"
"USER4","APP3 APP4"
"USER5","APP1 APP9"
"USER6","APP9"
Nun würde ich diese gerne folgendermaßen umwandeln:
LOGIN;APP1;APP2;APP3;APP4;APP5;APP6;APP7;APP8;APP9
"USER1";X;;;X;X;;;;;;
"USER2";X;X;;;;;;;;;
"USER3";;;;;;X;X;;;;
"USER4";;;X;X;;;;;
"USER5";X;;;;;;;;X
"USER6";;;;;;;;;X
Über jede Anregung, wie dies in PowerShell möglich wäre, würde ich mich freuen.
Gruß
Willi
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 374375
Url: https://administrator.de/forum/powershell-csv-datei-in-bestimmtes-format-umwandeln-374375.html
Ausgedruckt am: 07.04.2025 um 11:04 Uhr
8 Kommentare
Neuester Kommentar
Nabend.
Versuch es mal hiermit:
Was Du anpassen musst, sind die Pfade für die CSV-Datein.
z.B.: In der ersten Zeile: "D:\test.csv" & in der letzten Zeile: "D:\new.csv"
Gruß
tfi2013
Versuch es mal hiermit:
Was Du anpassen musst, sind die Pfade für die CSV-Datein.
z.B.: In der ersten Zeile: "D:\test.csv" & in der letzten Zeile: "D:\new.csv"
$CSVToConvert = Get-Content "D:\test.csv" | ConvertFrom-Csv -Header Login,App
$NewCsvLine = "" | Select Login, App1, App2, App3, App4, App5, App6, App7, App8, App9
[Array] $NewCsv = @()
For($i=0; $i -lt $CSVToConvert.Login.Count; $i++){
$SplittedApp = $CSVToConvert.App[$i].Split(" ")
For($j=0; $j -lt $SplittedApp.Count; $j++){
Switch($SplittedApp[$j]){
"APP1" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App1 = "X"; Break}
"APP2" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App2 = "X"; Break}
"APP3" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App3 = "X"; Break}
"APP4" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App4 = "X"; Break}
"APP5" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App5 = "X"; Break}
"APP6" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App6 = "X"; Break}
"APP7" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App7 = "X"; Break}
"APP8" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App8 = "X"; Break}
"APP9" {$NewCsvLine.Login = $CSVToConvert.Login[$i]; $NewCsvLine.App9 = "X"; Break}
}
}
$NewCsv = [Array]$NewCsv + $NewCsvLine
$NewCsvLine = "" | Select Login, App1, App2, App3, App4, App5, App6, App7, App8, App9
}
$NewCsv | Select Login, App1, App2, App3, App4, App5, App6, App7, App8, App9 | Export-Csv -Path "D:\new.csv" -Delimiter ";" -NoTypeInformation
Gruß
tfi2013
Servus Willi,
eleganter und ohne feste Zuweisung von Appnamen wäre das hier:
Grüße Uwe
eleganter und ohne feste Zuweisung von Appnamen wäre das hier:
# Eingabedatei
$fileIN = 'D:\apps.csv'
# Ausgabedatei
$fileOUT = 'D:\apps_new.csv'
# =========================
# Import mit neuem Header
$csv = Import-CSV $fileIN -Delimiter ',' -Header 'Login','Raw'
# App Member hinzufügen
$csv | %{$_.Raw.Split(' ').Trim()} | select -Unique | %{$csv | Add-Member -MemberType NoteProperty -Name $_ -Value '' -Force}
# zugehörige Apps zuweisen
foreach($entry in $csv){
$entry.Raw.Split(' ').Trim() | %{$entry.$_ = 'X'}
}
# output
$csv | select -Exclude Raw | export-csv $fileOUT -Delimiter ';' -NoType -Encoding UTF8