rst1989
Goto Top

Zwei CSV-Dateien vergleichen und Spalte mit übernehmen

Hallo zusammen,

ich steh vor folgender Herausforderung für ein Powershell-Script:

Es gibt zwei CSV-Dateien:
Bestand_Alt.csv
Bestand_Neu.csv
(Jeweils mit Kopfzeile: Artikelnummer, Bestand)

Diese beiden CSV-Dateien möchte ich nun vergleichen. Alle Spalten mit der Kopfüberschrift "BESTAND" sollen verglichen werden und nur geänderte Datensätze sollen in eine neue CSV-Datei geschrieben werden. Das bekomme ich soweit noch hin - aber der Knackpunkt ist: Ich möchte aus der "Bestand_Alt.csv" die Spalte "BESTAND" in die neue Datei übernehmen damit ich die Datensätze vergleichen kann.

Sprich aus Besatnd_Alt.csv und Bestand_Neu.csv wird Vergleich.csv und diese soll folgende Spalten haben:
Artikelnummer, Bestand_Alt, Bestand_Neu

Ist soetwas über Powershell möglich?

Vielen Dank im Voraus.

Content-ID: 380470

Url: https://administrator.de/forum/zwei-csv-dateien-vergleichen-und-spalte-mit-uebernehmen-380470.html

Ausgedruckt am: 23.12.2024 um 07:12 Uhr

colinardo
Lösung colinardo 17.07.2018 aktualisiert um 11:04:00 Uhr
Goto Top
Servus.
Ist soetwas über Powershell möglich?
Wäre ein Wunder wenn nicht face-smile. kein Thema:
(Delimiter und Pfade anpassen.)
$old = Import-CSV 'D:\alt.csv' -Delimiter ";"  
$new = Import-CSV 'D:\neu.csv' -Delimiter ";"  
compare-object $old $new -Prop Artikelnummer,Bestand -Passthru | group Artikelnummer | select @{n='Artikelnummer';e={$_.Name}},@{n='Bestand_Alt';e={($_.Group | ?{$_.SideIndicator -eq '<='}).Bestand}}, @{n='Bestand_Neu';e={($_.Group | ?{$_.SideIndicator -eq '=>'}).Bestand}} | export-csv 'D:\Vergleich.csv' -NoType -delimiter ";" -Encoding UTF8  
Grüße Uwe
rst1989
rst1989 17.07.2018 um 12:31:26 Uhr
Goto Top
Vielen Dank! Läuft! face-smile
colinardo
colinardo 17.07.2018 um 12:33:35 Uhr
Goto Top
Gern geschehen. face-wink.
rst1989
rst1989 27.07.2018 um 07:50:43 Uhr
Goto Top
Jetzt habe ich nochmal eine Frage bitte: Wie sieht das ganze aus wenn die Datei nicht nur aus den zwei Spalten "Artikelnummer" und "Bestand" besteht? Jetzt habe ich wahnsinnig viele Spalten in der Datei und möchte nur den alten mit dem neuen Bestand vergleichen und den alten Bestand in die Output-Datei packen.
colinardo
Lösung colinardo 27.07.2018 um 09:12:55 Uhr
Goto Top
Ausnahmsweise
$old = Import-CSV 'D:\alt.csv' -Delimiter ";"  
$new = Import-CSV 'D:\neu.csv' -Delimiter ";"  
$changed = compare-object $old $new -Prop Artikelnummer,Bestand -Passthru 
$changed | ?{$_.SideIndicator -eq '=>'} | select *,@{n='Bestand_Alt';e={$an = $_.Artikelnummer;($changed | ?{$_.Artikelnummer -eq $an -and $_.SideIndicator -eq '<='}| %{$_.Bestand})}} -Exclude SideIndicator | export-csv 'D:\Vergleich.csv' -NoType -delimiter ";" -Encoding UTF8  
rst1989
rst1989 27.07.2018 um 12:06:34 Uhr
Goto Top
Ein herzliches Dankeschön! face-smile