abacus08
Goto Top

Zwei CSV-Dateien vergleichen und Unterschiede ausgeben

Hallo Zusammen,

ich komme einfach nicht weiter. Vielleicht kann mir einer von Euch helfen.

Ich habe zwei CSV-Dateien, die ich vergleichen möchte.
CSV1 enthält alle z.Z. gespeicherten Datensätze.
In CSV2 hingegen ist ggf. nur ein Teil der Datensätze verfügbar, es können aber auch neue Datensätze enthalten sein und die enthaltenen Datensätze können Unterschiede enthalten.

Im Feld NUMMER ist der eindeutige Wert, der den Datensatz identifiziert gespeichert.
Die Werte NAME und ANZAHL können differieren. Diese möchte ich, zusätzlich zu den "zusätzlichen" Datensätze aus Datei CSV2 ausgeben.

CSV1
Nummer:Name;Anzahl
1;Test1;4
2;Test2;2
3;Test3;7
4;Test4;8
5;ZUM;4
6;TGV;1

CSV2
Nummer:Name;Anzahl
1;Test1;4
2;Test2;2
3;Test3;1
4;Test4;1
5;ABC;3

Gewünschte Ausgabe:
3;Test3;1
4;Test4;1
5;ABC;3

Hier mein bisheriges "Skript" face-wink:
$csv1 = Import-CSV 'D:\Pruef\Alle.csv' -Delimiter ";"    
$csv2 = Import-CSV 'D:\Pruef\Teil1_export.csv' -Delimiter ";"    
Compare $csv1 $csv2 -Property Nummer,Name,Anzahl | Export-Csv D:\Pruef\Ausgabe.csv -NoTypeInformation 

Leider schaffe ich es nicht, nur die unterschiedlichen oder fehlenden Zeilen in die Ausgabe-Datei zu schreiben.

Für jede Hilfe wäre ich sehr dankbar.

VG
Abacus

Content-ID: 71672301436

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

Ausgedruckt am: 21.11.2024 um 13:11 Uhr

Lochkartenstanzer
Lochkartenstanzer 22.07.2024 um 21:49:29 Uhr
Goto Top
Moin,

CSV1.csv
Nummer:Name;Anzahl
1;Test1;4
2;Test2;2
3;Test3;7
4;Test4;8
5;ZUM;4
6;TGV;1

CSV2.csv
Nummer:Name;Anzahl
1;Test1;4
2;Test2;2
3;Test3;1
4;Test4;1
5;ABC;3

lks@nana$ diff -y CSV1.csv  CSV2.csv | grep "|" | gawk -F "|" ' { print $2 } '  | sed -e "s:\t::g"
3;Test3;1
4;Test4;1
5;ABC;3

lks
Abacus08
Abacus08 22.07.2024 um 22:13:17 Uhr
Goto Top
Hallo Lochkartenstanzer,

vielen Dank für Deine Unterstützung. Leider habe ich nur PowerShell zur Verfügung und darf keine weiteren Tools installieren. Dein Script kann ich deshalb leider nicht nutzen.

VG
Abacus
Lochkartenstanzer
Lochkartenstanzer 22.07.2024 um 22:19:46 Uhr
Goto Top
TK1987
Lösung TK1987 22.07.2024 aktualisiert um 22:32:39 Uhr
Goto Top
Moin,

Zitat von @Abacus08:
Hier mein bisheriges "Skript" face-wink:
$csv1 = Import-CSV 'D:\Pruef\Alle.csv' -Delimiter ";"    
$csv2 = Import-CSV 'D:\Pruef\Teil1_export.csv' -Delimiter ";"    
Compare $csv1 $csv2 -Property Nummer,Name,Anzahl | Export-Csv D:\Pruef\Ausgabe.csv -NoTypeInformation 

Leider schaffe ich es nicht, nur die unterschiedlichen oder fehlenden Zeilen in die Ausgabe-Datei zu schreiben.
einfach nach dem SideIndicator filtern...
$csv1 = Import-CSV 'D:\Pruef\Alle.csv' -Delimiter ";"    
$csv2 = Import-CSV 'D:\Pruef\Teil1_export.csv' -Delimiter ";"    
Compare $csv1 $csv2 -Property Nummer,Name,Anzahl | ? SideIndicator -eq '=>' | Select Nummer,Name,Anzahl | Export-Csv -d ';' D:\Pruef\Ausgabe.csv -NoTypeInformation   
tio.run

Gruß Thomas
Abacus08
Lösung Abacus08 22.07.2024 um 22:56:00 Uhr
Goto Top
Hallo Thomas,

manchmal kann es so einfach sein face-smile.
Vielen Dank für Deine Hilfe. Das hilft mir schon sehr weiter.

VG
Abacus
ukulele-7
ukulele-7 23.07.2024 um 08:40:56 Uhr
Goto Top
Wenn du schon mit einem Export arbeitest, gibt es dann vielleicht auch eine SQL DB mit den Daten? In SQL wäre es mit EXCEPT leicht zu lösen und auch sonst alles individuell umsetzbar.
Abacus08
Abacus08 04.08.2024 um 09:25:19 Uhr
Goto Top
Hallo ukulele-7,

entschuldige die späte Rückantwort.
Da hast Du natürlich Recht, aber ich brauchte die Abfrage nur für einen speziellen Fall und da war mir der Aufwand etwas zu hoch face-wink

Trotzdem vielen Dank für Deinen Hinweis
Abacus