Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Spalten von CSV Dateien per Batch zusammenfügen

Mitglied: thedummy

thedummy (Level 1) - Jetzt verbinden

13.03.2019 um 10:43 Uhr, 339 Aufrufe, 21 Kommentare, 2 Danke

Hi,

ich würde gerne zwei CSV Dateien zusammenfügen. Konkret soll eine Spalte aus der 2.CSV Datei an die 1.CSV Datei angefügt werden.

CSV1:
Spalte A; Spalte B; Spalte C; Spalte D; Spalte E; Spalte F;

CSV2:
Spalte A; Spalte B; Spalte G

Ziel CSV1:
Spalte A; Spalte B; Spalte C; Spalte D; Spalte E; Spalte F; Spalte G;


Ist sowas per PowerShell Batch möglich und wenn ja, wie?

Danke für die Hilfe im Voraus.
Mitglied: 138810
13.03.2019, aktualisiert um 10:47 Uhr
Bitte warten ..
Mitglied: thedummy
13.03.2019 um 11:03 Uhr
allerdings wird dort nur beschrieben, wie eine weitere Spalte hinzugefügt wird. Ich möchte die Spalte aus einer anderen CSV Datei kopieren.
Bitte warten ..
Mitglied: 138810
13.03.2019, aktualisiert um 11:07 Uhr
Naja bisschen Kopf benutzen sollte man schon noch können... Du schreibst ja noch nicht mal welche Spalten (A oder B)die in beiden Files paarweise Werte enthalten, da kann man nur raten welche Zeilen du zusammenfügen willst...
Bitte warten ..
Mitglied: thedummy
13.03.2019 um 11:05 Uhr
grundsätzlich gebe ich Dir recht. Keine Frage. Ich habe halt nicht wirklich einen Plan von PowerShell Kommandos.
Bitte warten ..
Mitglied: 138810
13.03.2019 um 11:06 Uhr
S. Erg.
Bitte warten ..
Mitglied: thedummy
13.03.2019 um 11:08 Uhr
ich will eigentlich nur stumpf eine bestimmte Spalte aus der zweiten CSV in die erste CSV kopieren. Die ersten zwei Spalten der CSV Dateien sind gleich.
Bitte warten ..
Mitglied: 138810
13.03.2019, aktualisiert 14.03.2019
01.
$csv1 = Import-CSV 'd:\file1.csv' -delimiter ";"
02.
$csv2 = Import-CSV 'd:\file2.csv' -delimiter ";"
03.
$csv1 | select *,@{n='Spalte G';e={$this = $_; $csv2 | ?{$_.'Spalte A' -eq $this.'Spalte A' -and $_.'Spalte B' -eq $this.'Spalte B'} | select -Expand 'Spalte G'}} | export-csv .\datei_neu.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
Spaltennamen und Dateipfade anpassen.

Tschö ...
Bitte warten ..
Mitglied: thedummy
13.03.2019 um 12:32 Uhr
Zunächst einmal Danke.

Ich habe das wie folgt modifiziert und erhalte eine Fehlermeldung.

01.
$csv1 | Import-CSV 'y:\test\csv01.csv' -delimiter ";"
02.
$csv2 | Import-CSV 'y:\test\csv99.csv' -delimiter ";"
03.
$csv1 | select *,@{n='global_rad:W';e={$this = $_; $csv2 | ?{$_.'station_id' -eq $this.'station_id' and $_.'validdate' -eq $this.'validdate'} | select -Expand 'global_rad:W'}} | export-csv .\januar01.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
Fehlermeldung:
Der Befehl "$csv1" ist entweder falsch geschrieben oder konnte nicht gefunden werden.
Bitte warten ..
Mitglied: 138810
13.03.2019 um 12:39 Uhr
Tippfehler.
Bitte warten ..
Mitglied: thedummy
13.03.2019 um 12:55 Uhr
ja, habe den Tippfehler gefunden:

01.
$csv1 = Import-CSV 'y:\test\csv01.csv' -delimiter ";"
02.
$csv2 = Import-CSV 'y:\test\csv99.csv' -delimiter ";"
03.
$csv1 | select *,@{n='global_rad:W';e={$this = $_; $csv2 | ?{$_.'station_id' -eq $this.'station_id' and $_.'validdate' -eq $this.'validdate'} | select -Expand 'global_rad:W'}} | export-csv .\januar01.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
Erhalte die selbe Fehlermeldung, allerdings mit dem Hinweis auf die letzte Zeile: $csv1 | select...
Bitte warten ..
Mitglied: 138810
13.03.2019, aktualisiert um 13:10 Uhr
Nöp hier getestet ...geht einwandfrei.

Viel Spaß noch beim Powershell lernen, ich bin jetzt raus.
Bitte warten ..
Mitglied: Kraemer
13.03.2019 um 18:22 Uhr
Zitat von 138810:
01.
> $csv1 = Import-CSV 'd:\file1.csv' -delimiter ";"
02.
> $csv2 = Import-CSV 'd:\file2.csv' -delimiter ";"
03.
> $csv1 | select *,@{n='Spalte G';e={$this = $_; $csv2 | ?{$_.'Spalte A' -eq $this.'Spalte A' and $_.'Spalte B' -eq $this.'Spalte B'} | select -Expand 'Spalte G'}} | export-csv .\datei_neu.csv -delimiter ";" -NoTypeInformation -Encoding UTF8
04.
> 
Interessantes Konstrukt. Muss ich mir in einer ruhigen Minute mal reinziehen. Danke dafür.
Bitte warten ..
Mitglied: Kraemer
13.03.2019 um 18:23 Uhr
Zitat von thedummy:
Erhalte die selbe Fehlermeldung, allerdings mit dem Hinweis auf die letzte Zeile: $csv1 | select...
na, dass passiert, wenn man sich trotz konkreter Nachfragen, nicht einmal bemüht, ebendiese zu beantworten...
Bitte warten ..
Mitglied: 138810
13.03.2019, aktualisiert um 20:34 Uhr
Zitat von Kraemer:
Interessantes Konstrukt. Muss ich mir in einer ruhigen Minute mal reinziehen. Danke dafür.
Da kann ich dir schon mal auf die Sprünge helfen.
Vorgehensweise ist dabei folgende :
Die csv1 wird an Select gepiped, dort werden erst einmal alle Spalten selektiert (*) und mit einer Calculated Property also zusätzlichen Spalte ergänzt. Eine calculated property besteht im Grundsatz aus einer Hashtable mit zwei Eigenschaften, das eine n steht für "Name" und ist eine Abkürzung für den Namen der neuen Eigenschaft . Das e steht als Abkürzung für Expression welche einen Skriptblock enthält in der der Wert für die Eigenschaft festgelegt wird. Alles was in diesem Block ausgegeben wird wird nachher der Inhalt der Eigenschaft.
Darin geschieht jetzt folgendes:
Für jede Zeile der csv1 wird die aktuelle Zeile in der Variablen $this zwischengespeichert weil der Wert in einer anderen Pipe erneut genutzt wird. Dann werden die Zeilen der csv2 mit einem where-object ausgefiltert um die zugehörige Zeile in der csv2 zu ermitteln und dann die gewünschte Spalte ausgegeben. Im Beispiel sind das zwei Spalten die eine Zeile eindeutig identifizieren, das kann man dort beliebig anpassen, z.B. wenn man eine eindeutige Spalte mit einer ID hat, dann reicht der Vergleich einer einzigen Spalte.
Bitte warten ..
Mitglied: thedummy
14.03.2019 um 11:08 Uhr
ich finde den fehler nicht

erhalte für jede zeile die meldung, dass der befehl entweder falsch ist oder nicht gefunden werden konnte.

hilfee

01.
$csv1 = Import-CSV 'y:\test\csv01.csv' -delimiter ";"
02.
$csv2 = Import-CSV 'y:\test\csv99.csv' -delimiter ";"
03.
$csv1 | select *,@{n='global_rad:W';e={$this = $_; $csv2 | ?{$_.'station_id' -eq $this.'station_id' and $_.'validdate' -eq $this.'validdate'} | select -Expand 'global_rad:W'}} | export-csv 'y:\test\januar01.csv' -delimiter ";" -NoTypeInformation -Encoding UTF8
Bitte warten ..
Mitglied: 138810
14.03.2019, aktualisiert um 11:16 Uhr
ich finde den fehler nicht
Da fehlt bei dir ein Bindestrich vor dem "and".
Bitte warten ..
Mitglied: thedummy
14.03.2019 um 11:22 Uhr
01.
$csv1 = Import-CSV 'y:\test\csv01.csv' -delimiter ";"
02.
$csv2 = Import-CSV 'y:\test\csv99.csv' -delimiter ";"
03.
$csv1 | select *,@{n='global_rad:W';e={$this = $_; $csv2 | ?{$_.'station_id' -eq $this.'station_id' -and $_.'validdate' -eq $this.'validdate'} | select -Expand 'global_rad:W'}} | export-csv 'y:\test\januar01.csv' -delimiter ";" -NoTypeInformation -Encoding UTF8
leider hat das nicht geholfen. selbe fehlermeldung
Bitte warten ..
Mitglied: Kraemer
14.03.2019 um 11:26 Uhr
Zitat von 138810:
Da kann ich dir schon mal auf die Sprünge helfen.
ich danke dir! Hat mich erheblich weiter gebracht
Bitte warten ..
Mitglied: 138810
14.03.2019, aktualisiert um 11:30 Uhr
selbe fehlermeldung
Dann machst du grundlegend was falsch oder verwendest eine vollkommen veraltete PS Version, sorry.

Ohne vernünftigen Log und nicht nur so ein ungenaues dahingeschreibsel der Fehlermeldung ohne Screenshots und PS Version etc. kann ich dir nicht weiterhelfen! Da es wie gesagt einwandfrei funktioniert, der FEHLER liegt also bei dir selbst.
Bitte warten ..
Mitglied: 138810
14.03.2019, aktualisiert um 15:49 Uhr
Hier siehst du übrigens das es definitiv funktioniert
https://tio.run/##jY/RaoMwFIbv8xQHEYSxOPRqIDJbV8dudtNutyJ61gZiksXYdWif3e ...
Die Import-CSVs sind im Beipiel nur ersetzt durch Demodaten die in den Code integriert wurde, das Ergebnis ist aber das selbe das Import-CSV ergibt.
Bitte warten ..
Mitglied: LotPings
14.03.2019 um 22:01 Uhr
Rein interessehalber habe ich den Code etwas lesbarer umgeschrieben:

01.
$csv1 = Import-CSV '.\file1.csv' -Delimiter ";"
02.
$csv2 = Import-CSV '.\file2.csv' -Delimiter ";"
03.
$csv3 =            '.\file3.csv'
04.

05.
$csv1 | Select-Object *,@{n='Spalte G';e={$this = $_;
06.
  ($csv2 | Where-Object{$_.'Spalte A' -eq $this.'Spalte A' -and
07.
                        $_.'Spalte B' -eq $this.'Spalte B'}).'Spalte G'}
08.
} | Export-Csv $csv3 -Delimiter ";" -NoTypeInformation -Encoding UTF8
Und mit einem etwas konventionelleren Code verglichen :

01.
$csv1 = Import-CSV '.\file1.csv' -Delimiter ";" | Select-Object *,'Spalte G'
02.
$csv2 = Import-CSV '.\file2.csv' -Delimiter ";"
03.
$csv4 =            '.\file4.csv'
04.

05.
ForEach($Row in $csv1){
06.
  $Row.'Spalte G' = ($Csv2 | Where-Object {
07.
           $_.'Spalte A' -eq $Row.'Spalte A' -and
08.
           $_.'Spalte B' -eq $Row.'Spalte B'} ).'Spalte G'
09.
}
10.
$csv1 | Export-Csv $csv4 -Delimiter ";" -NoTypeInformation -Encoding UTF8
Mit Measure-Command ist die 2te Lösung ca 12%-25% schneller.
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Per Batch eine Spalte in eine CSV Datei einfügen

gelöst Frage von mayli01Batch & Shell13 Kommentare

Hallo Forum :) Folgende Ausgangssituation. Ich habe eine CSV Artikelliste mit insgesamt 9 Spalten, einer Kopfzeile und etwa 50 ...

Batch & Shell

CSV kleinerer Wert (Batch)

Frage von jochengBatch & Shell3 Kommentare

Ich habe eine CSV Datei mit folgendem Inhalt: 29664;24,95 29664;12,95 29645;9,95 29645;9,95 29655;12,95 29655;24,95 29664;24,95 29655,12,95 29655,24,95 29664;12,95 29664;24,95 ...

Batch & Shell

Batch - .csv to .txt

gelöst Frage von freshman2017Batch & Shell11 Kommentare

Hallo Ihr, ich habe da nochmal eine leichte kurze Frage, vielleicht hat da jemand ein Code für mich. Folgende ...

Batch & Shell

VBA Batch Datei automatischer email versand der neuen Datei ( excel oder csv )

Frage von skmyim500Batch & Shell10 Kommentare

Hallo Fachleute ich brauche folgende Informationen. Eine Batchdatei, welche aus einem bestimmten Ordner den neuen Excel Datei, ( neueren ...

Neue Wissensbeiträge
Administrator.de Feedback
Was als Noob hier mal gesagt werden musste
Information von th30ther vor 1 TagAdministrator.de Feedback2 Kommentare

Moinsen wertes Forum, ich möchte mich an dieser Stelle mal beim Forum generell und bei aqui speziell bedanken! Ich ...

Windows 10
Windows 10 Mai 2019 Update (Version 1903) ist da
Information von kgborn vor 1 TagWindows 104 Kommentare

Nur ein kurzer Infosplitter: Microsoft hat die Nacht (21. Mai 2019) das Funktionsupdate auf Windows 10 Version 1903 freigegeben. ...

E-Mail

Newsletter: Unread News - IT News in Byte Länge

Tipp von franktaylor vor 1 TagE-Mail11 Kommentare

Hallo, würde gerne auf einen Newsletter hinweisen, den ich heute per Zufall gefunden und mit euch gerne teilen möchte: ...

Outlook & Mail

Outlook 2016 stürzt ab, wenn man ein (at)- Zeichen im Text einer neuen E-Mail schreibt

Tipp von Enriqe vor 2 TagenOutlook & Mail4 Kommentare

Bei uns in der Firma häuften sich die Fälle, bei denen sich Outlook kommentarlos verabschiedet, wenn man ein - ...

Heiß diskutierte Inhalte
Hyper-V
Novell virtualisieren
Frage von spoboeHyper-V20 Kommentare

Hallo zusammen, ich habe absolut keine Ahnung von Novell, aber wir haben hier ein ganz altes Schätzchen (vermutlich Novell ...

Windows Server
Ungewollte IP Änderung am DC sorgt für Probleme
Frage von thomas-99Windows Server19 Kommentare

Hallo Zusammen, wir haben ein kleines Netz mit 5 verschiedenen VMs (DC, AD, Fileserver, Exchange, TK Anlage - alle ...

Windows Netzwerk
Netzlaufwerk: einfache Liste der täglich gelöschten, geänderten+neuen Files
gelöst Frage von mylightWindows Netzwerk17 Kommentare

wir haben Windows Clients, das zentrale Teamlaufwerk liegt auf einem Netzwerkserver (ca. 100Gb, 10.000 Verzeichnisse, 180.000Dateien), auf die Konsole ...

Netzwerkmanagement
Gateprotect Firewall - Internetseiten werden teilw. nicht geladen
Frage von KivasFNetzwerkmanagement16 Kommentare

Morgen Zusammen, ich habe ein Problem mit einer Gateprotect Firewall welches mir echt Kopfschmerzen bereitet. Die Firewall hängt an ...