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, 253 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: 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: freesolo
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: freesolo
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: freesolo
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: freesolo
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: freesolo
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 freesolo:
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: freesolo
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: freesolo
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 freesolo:
Da kann ich dir schon mal auf die Sprünge helfen.
ich danke dir! Hat mich erheblich weiter gebracht
Bitte warten ..
Mitglied: freesolo
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: freesolo
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
Windows XP

Zeilen einer zusammengeführten CSV Datei über Batch ändern

Frage von NelspruitWindows XP12 Kommentare

Hallo zusammen, ich habe über batch ca. 1000 CSV Datein (Messdaten) zusammengeführt. Das Ganze schaut nun in der neuen ...

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 ...

Neue Wissensbeiträge
Datenschutz

SiSyPHuS Win10: Analyse der Telemetriekomponenten in Windows 10

Tipp von freesolo vor 3 TagenDatenschutz1 Kommentar

Alle die sich detailliert für die Datensammlung interessieren die unter Windows 10 stattfindet, sollten sich folgende Analyse des BSI ...

Sicherheit
Adminrechte dank Intel-Grafikkarte
Information von DerWoWusste vor 3 TagenSicherheit2 Kommentare

ist das Advisory, welches beschreibt, welche Intel HD Graphics Modelle Sicherheitslücken haben, mit denen sich schwache Nutzer zu Admins ...

Internet

EU Urheberrechtsreform: Eingriff in die Internetkultur

Information von Frank vor 3 TagenInternet1 Kommentar

Liebe Besucherin, lieber Besucher, warum erscheint das obere Banner in allen Beiträgen? Aus Protest gegen Teile der geplanten EU-Urheberrechtsreform ...

Windows Server
Windows Backup - FilterManager Event 3
Tipp von NixVerstehen vor 4 TagenWindows Server

Hallo zusammen, ich bin kein gelernter ITler und auch beruflich nicht in dem Feld tätig. Wir setzen in unserem ...

Heiß diskutierte Inhalte
Hyper-V
Hyper-V Manager startet, jedoch keine VM
Frage von NaleorHyper-V14 Kommentare

Hallo zusammen, auf meinem Windows 10 (Build 1703) Notebook von der Arbeit scheint Hyper-V plötzliche nicht mehr zu funktionieren. ...

DNS
50 EUR für Telekom-, Unitymedia- und Vodafone-Kunden
Frage von Zorro1199DNS14 Kommentare

Hallo zusammen, wie evaluieren gerade das korrekte Einhalten von DNS-TTLs durch verschiedene Provider. Aktuell suchen wir noch Kunden der ...

Windows Server
Sonntagsfrage: Welchen Sinn seht Ihr noch im Server 2019 Essentials
Frage von ashnodWindows Server13 Kommentare

Guten Morgen, ich habe gestern den Windows Server 2019 Essentials als Trial in einer VM installiert um mir das ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...