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, 238 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
Sicherheits-Tools
Putty hat heftige Bugs korrigiert!
Information von Lochkartenstanzer vor 23 StundenSicherheits-Tools5 Kommentare

Moin, Wie man aus herauslesen kann, sind in den Versionen vor 0.71 gravierende Bugs, die es angeraten erscheinen lassen, ...

Off Topic
Sachen die die Welt nicht braucht - Platz 1
Tipp von brammer vor 3 TagenOff Topic18 Kommentare

Hallo, ich habs als Tipp angelegt als Erfahrungsbericht nein Danke brammer

Humor (lol)
Spirit of Health-Kongress in Berlin
Information von AnkhMorpork vor 4 TagenHumor (lol)5 Kommentare

tgif! Beim dritten Spirit of Health-Kongress trafen sich am Wochenende Alternativmediziner und Naturheilkundler im Maritim Hotel Berlin, um sich ...

Windows 7

Updates zum Nachrüsten des SHA-2-Support für Windows 7 SP1, Windows Server 2008 (R2) und WSUS 3.0 SP2 sind da

Information von kgborn vor 5 TagenWindows 7

Wie bereits früher angekündigt (Windows 7 u. Server 2008 (R2) SHA-2-Update kommt am 12. März 2019) hat Microsoft die ...

Heiß diskutierte Inhalte
Cloud-Dienste
Remotedesktopverbindungen beeinflussen sich gegenseitig
gelöst Frage von Samy89Cloud-Dienste15 Kommentare

Moin, ich habe mehrere RDPs gleichzeitig laufen, auf denen jeweils ein Script via Powershell läuft. In diesem Prozess benutzt ...

DNS
Größere DNS Probleme nach zweitem DC. Eigentlich sollte es auch dadurch besser werden
Frage von TeWutzDNS12 Kommentare

Hallo zusammen, nachdem ich letzte Woche erfolgreich einen zweiten DC ) an den Start gebracht habe melden sich weiterhin ...

LAN, WAN, Wireless
Switch als Verbindung von 2 Netzwerken
gelöst Frage von Lutz-ReLAN, WAN, Wireless12 Kommentare

Guten Tag Ich hab folgendes Problem 2 Rechner und 2 IP Kameras sind ohne dhcp in einen IP4 Netzwerk ...

Netzwerkgrundlagen
Reicht 10GBit Uplink Port für Stacking für ein 10GBit Switch?
gelöst Frage von walnickNetzwerkgrundlagen12 Kommentare

Hallo, Ich habe eine frage. Ich überlege gerade 2 neue Switche von CiscoSG350XG-24F  zu kaufen und die als Core ...