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-Key: 380470

Url: https://administrator.de/contentid/380470

Printed on: April 23, 2024 at 19:04 o'clock

Member: colinardo
Solution colinardo Jul 17, 2018 updated at 09:04:00 (UTC)
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
Member: rst1989
rst1989 Jul 17, 2018 at 10:31:26 (UTC)
Goto Top
Vielen Dank! Läuft! face-smile
Member: colinardo
colinardo Jul 17, 2018 at 10:33:35 (UTC)
Goto Top
Gern geschehen. face-wink.
Member: rst1989
rst1989 Jul 27, 2018 at 05:50:43 (UTC)
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.
Member: colinardo
Solution colinardo Jul 27, 2018 at 07:12:55 (UTC)
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  
Member: rst1989
rst1989 Jul 27, 2018 at 10:06:34 (UTC)
Goto Top
Ein herzliches Dankeschön! face-smile