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-Key: 527338

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

Printed on: April 27, 2024 at 20:04 o'clock

Mitglied: 142232
142232 Dec 19, 2019, updated at Dec 21, 2019 at 10:00:57 (UTC)
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  
Member: erikro
Solution erikro Dec 20, 2019 at 09:41:26 (UTC)
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
Member: runner-ralf
runner-ralf Dec 20, 2019 at 17:56:30 (UTC)
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.
Mitglied: 142232
142232 Dec 21, 2019 updated at 10:00:06 (UTC)
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.