Batch für CSV Zusammenfassung
Guten Tag kurz vor Ostern,
Gibt es eine Möglichkeit ggf. mit einem Code-Schnippsel aus Powershell Werte aus einer CSV Datei zusammenzufassen, wenn der Wert in der 1. Spalte immer gleich ist? Sprich immer den Wert aus der letzten Spalte zusammenfassen. Die Anzahl der gleichen Datensätze ist auf max 20 Datensätze pro gleichem Wert begrenzt.
Quell CSV Datei:
Ziel CSV Datei:
Liebe Ostergrüße!
Gibt es eine Möglichkeit ggf. mit einem Code-Schnippsel aus Powershell Werte aus einer CSV Datei zusammenzufassen, wenn der Wert in der 1. Spalte immer gleich ist? Sprich immer den Wert aus der letzten Spalte zusammenfassen. Die Anzahl der gleichen Datensätze ist auf max 20 Datensätze pro gleichem Wert begrenzt.
Quell CSV Datei:
TEST;1234;5456151321321;
TEST;1234;3456151321321;
TEST;1234;3456151321321;
TEST1;1234;5456151321321;
TEST1;1234;3456151321321;
TEST1;1234;3456151321321;
Ziel CSV Datei:
TEST;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
TEST1;WAHR;5456151321321;3456151321321;3456151321321;;;;;;;;;;;;;;;;;;
Liebe Ostergrüße!
Please also mark the comments that contributed to the solution of the article
Content-Key: 665324
Url: https://administrator.de/contentid/665324
Printed on: April 23, 2024 at 06:04 o'clock
11 Comments
Latest comment
Moin,
Schöne Ostergrüße zurück.
Gruß Thomas
$Source = 'C:\Test\File.CSV'
$CSV = Import-CSV -Path $Source -d ';' -Header (1..3)
Foreach ($Obj in ($CSV.1|Select -unique)) {
[Array]$Out += "{0};WAHR;{1}" -f $Obj,(($CSV | Where-Object 1 -eq $Obj).3 -Join ';')
}
$Out | Set-Content -Enc utf8 "C:\Test\NewFile.csv"
Schöne Ostergrüße zurück.
Gruß Thomas
Zitat von @freshman2017:
NewFile.csv
Wieso hast du so viele Zeilen? Wenn ich das mit deiner file.csv ausführe, bekomme ich nurNewFile.csv
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
...
TEST;WAHR;5456151321321;3456151321321;3456151321321
TEST1;WAHR;5456151321321;3456151321321;3456151321321
Das könnte man z.B. ganz leicht erreichen, indem man den Output nochmal durch den CSV-Converter jagt:
tio.run
$Out | ConvertFrom-CSV -d ';' -Header (1..22) | ConvertTo-CSV -d ';' -NoTypeInfo | Select -skip 1 | Set-Content "C:\Test\NewFile.CSV"
Ich würde es gleich mit Group-Object abfackeln 😉
https://tio.run/##lY5NC4JAEIbv/opBDDVccV3tsgSG9HHqkFLHkNy@UFdWrcPmbzelSw ...
Da der Jung das wohl wieder als Batch/Powershell Mischmasch haben will hier der Batch-Einzeiler dazu
Gruß w.
https://tio.run/##lY5NC4JAEIbv/opBDDVccV3tsgSG9HHqkFLHkNy@UFdWrcPmbzelSw ...
Da der Jung das wohl wieder als Batch/Powershell Mischmasch haben will hier der Batch-Einzeiler dazu
@echo off
powershell -EP Bypass -C "Import-CSV 'D:\datei.csv' -d ';' -Head (1..3) | group '1' | %%{'{0};WAHR;{1}{2}' -f $_.Name,($_.Group.3 -join ';'),(';'*(20 - $_.Count))}"
Gruß w.