runner-ralf
Goto Top

Powershell: Textdatei bei denen zwei Spalten gleich und eine dritte unterschiedlich ist entfernen

Hallo alle zusammen,

ich habe eine Textdatei auto.txt in der es drei Spalten(getrennt durch Semikolon gibt)

Header:

Name; Version; Datum

Es gibt in der Datei viele gleiche Zeilen die ich durch -unique entfernt habe. Es gibt aber Zeilen bei denen -unique auch nicht hilft weil es das Feld Datum mal leer und mal befüllt gibt:

Fiat; 500; 21.11.2018
Fiat; 500;
Audi; RS4; 26.06.2018
Audi; RS4;

In diesem Fall sollen nur die Zeilen übernommen werden bei denen auch ein Datum hinterlegt ist.

Ich habe das mit 3 Array gelöst aber da habe ich das Problem dass mir die einzelnen Spalten dann untereinander als Ergebnis gespeichert werden.

Jetzt dachte ich dass ich hier mal nachfrage weil das wahrscheinlich viel leichter zu bewerkstelligen ist als ich das versucht habe (Array)

Wäre für einen Denkanstoß dankbar.

Gruß

Ralf

Content-ID: 527338

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

Ausgedruckt am: 23.11.2024 um 05:11 Uhr

142232
142232 19.12.2019, aktualisiert am 21.12.2019 um 11:00:57 Uhr
Goto Top
Import-CSV 'd:\auto.txt' -delimiter ';' | sort {get-date $_.Datum} -Desc | group Name,Version | %{$_.Group} | export-csv 'd:\auto_neu.txt' -Delimiter ';' -NoTypeInformation -Encoding UTF8  
erikro
Lösung erikro 20.12.2019 um 10:41:26 Uhr
Goto Top
Moin,

vermutlich willst Du die Datumsspalte erhalten:

import-csv .\auto.csv -delimiter ";" | where-object {$_.datum} | export-csv auto_neu.csv -delimiter ";" -NoTypeInformation  

Das war's.

hth

Erik
runner-ralf
runner-ralf 20.12.2019 um 18:56:30 Uhr
Goto Top
Hallo serial,

besten Dank. Was aber macht genau %{$_.Group}? Der Rest ist alles klar. Nimmt immer das erte Element der gruppierten Zeilen. Und da das Datum absteigend sortiert ist, steht das Feld mit Datum an erster Stelle. In die neue Datei werden nur die ersten Zeilen der gruppierten Zeilen übertragen?

So könnte es sein....

Danke noch einmal.
142232
142232 21.12.2019 aktualisiert um 11:00:06 Uhr
Goto Top
Zitat von @runner-ralf:

Hallo serial,

besten Dank. Was aber macht genau %{$_.Group}?
Das ist eine Foreach-Schleife die für jede Gruppe das erste Objekt (mit allen Spalten) der Gruppe nimmt. Da die Einträge absteigend sortiert sind nimmt er den Eintrag mit dem aktuellsten Datum. Sollten also mehrere Einträge mit unterschiedlichen Datumwerten existieren nimmt er den mit dem aktuellsten Datum. Falls das bei dir nicht der Fall sein sollte kannst du natürlich auch zu Eriks Variante greifen, es war mir nur nicht klar was bei dir der Fall sein könnte, deswegen diese erweiterte Variante.
Der Rest ist alles klar. Nimmt immer das erte Element der gruppierten Zeilen. Und da das Datum absteigend sortiert ist, steht das Feld mit Datum an erster Stelle. In die neue Datei werden nur die ersten Zeilen der gruppierten Zeilen übertragen?
Korrekt
Danke noch einmal.
Bitte, und frohes Fest.

Gruß s.