Jump to content

CSV doppelte Zeilen löschen


Recommended Posts

weiß nicht ob das für mich noch so sehr viel Sinn macht, bin eigentlich in den meisten Fällen mit dem guten alten Batch gut zurecht gekommen, ist für mich auch wesentlich leichter lesbar, in Powershell sind mir definitiv zuviel geschweifte Klammern ;), da bekomm ich Augenkrebs. Aber ich schaue mal was Tante Google sagt

 

Trotzdem erst mal recht herzlichen Dank

Um Deien Frage zu beantworten, je es steht was bei Tante Google, aber wie bei so vielen Quelen was PS angeht passiert wieder mal nichts:

 

Import-Csv .\OutputFiltered.csv | sort Hostname

 

 

ok ich habs jetzt (blindes Huhn findet auch mal nen Korn lach)

 

Import-Csv -Path 'C:\SC\CSVmerge\OutputFiltered.csv' | sort -Property "Hostname" | Export-CSV -Path C:\SC\CSVmerge\OutputSortedEnd.csv -Delimiter ',' -NoTypeInformation

 

ein schönes Wochende noch

  • Like 1
Link to post
Am 13.11.2021 um 16:30 schrieb cj_berlin:

Mein obiger Code war damit in unter zwei Sekunden fertig. Dahingegen hat auf demselben Rechner allein der Part mit Select -Unique 30-40 Sekunden in Anspruch genommen.

Du warst auch zu oft auf der Powershell Conf EU :grins1::thumb1:

Link to post

Na vielleicht tret ich der Sache ja noch etwas näher, manches ist ja wirklich eleganter als beim guten alten Batch. Bei der Gelegenheit würd ich gern noch eine kleine Frage einflechten. In meinem kleinen InventoryScript habe ich eine Variable defniert, welche sich aus der Systembeschreibung ergibt. Dort steht standardmässig sowas wie Name, Vorname - PC.  Zudammen mit anderen definierten Systemvariablen wird dieses dann in eine csv gepackt. Sieht auschnittsweise so aus:

 

$BeschreibungKey = 'HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'
$BeschreibungTest = Test-Path $BeschreibungKey
$BeschreibungSrvcomment = (Get-ItemProperty $BeschreibungKey).Srvcomment
Write-Verbose "Beschreibung Srvcomment: $BeschreibungSrvcomment" -Verbose

$Description = $BeschreibungSrvcomment

 

 

Am Ende wird halrt eine CSV geschrieben, und zwar derart:

 

#CSV Ausgbe
$Ausgabe = [PSCustomObject]@{
.
.
'Beschreibung'     =$Description;
.
.
  }
    $Ausgabe | Export-Csv -Path $DestinationFolder\Ausgabe.csv -NoTypeInformation

Das Problem hierbei ist das Komma in der Beschreibung, leider bekomme ich es nicht hin, dass er mir hier keine zweite Spalte aufmacht, klar wegen dem Komma im csv. Kann ich da irgendwie eine Ausnahme erstellen für diese Variable, oder wäre die einzige Lösung einen anderen delimiter zu nehmen? Leider bin ich bei Google nicht so richtig fündig geworden

 

 

 

lg und schönen Abend

 

 

Stef

 

 

 

 

 

 

 

Link to post
vor 2 Stunden schrieb stefan4711:

leider bekomme ich es nicht hin, dass er mir hier keine zweite Spalte aufmacht, klar wegen dem Komma im csv.

In einem strandard-konformen CSV ist das kein Problem, weil das Komma, welches in der Beschreibung auftaucht zwischen Gänsefüßchen eingeschlossen wird.  ;-) 

  • Like 1
Link to post
vor 8 Minuten schrieb BOfH_666:

In einem strandard-konformen CSV ist das kein Problem, weil das Komma, welches in der Beschreibung auftaucht zwischen Gänsefüßchen eingeschlossen wird.  ;-) 

...und PowerShell legt den Standard beim Exportieren sogar so aus, dass *jeder* String in Gänsefüßchen eingeschlossen wird, egal, ob er den Delimiter enthält oder nicht. Beim Importieren werden aber RFC4180-konforme Dateien korrekt importiert.

  • Like 1
Link to post

So danke erst mal noch, leider scheint es so nicht ganz zu funktionieren, denke habe mich wieder mal falsch ausgedrückt. Die Server Bezeichnung wird immer nach folgendem Muster gebildet: Mustermann, Vorname - PC.

 

Ich habe es jetzt nach deinem Vorschlag so stehen:

$BeschreibungKey = 'HKLM:\SYSTEM\CurrentControlSet\Services\lanmanserver\parameters'
$BeschreibungTest = Test-Path $BeschreibungKey
$BeschreibungSrvcomment = (Get-ItemProperty $BeschreibungKey).Srvcomment
Write-Verbose "Beschreibung Srvcomment: $BeschreibungSrvcomment" -Verbose
 
$Description = $BeschreibungSrvcomment




#Ausgabe

'Beschreibung'     = $(-join ("`'", $Description, "`'"));

Was er nun macht ist folgendes (oben die Spaltennamen):

 

Hostname             Beschreibung      Seriennummer    .... ... ..  ....

'Mustermann       Vorname - PC'      ............

 

Er macht also 2 Fehler, er teilt den String weiterhin auf eine zweite Spalte auf, in der sonst was ganz anderes stehen soll, es werden zusätzlich noch 2 überflüssige ' erzeugt. Irgendwas scheint an der Syntax noch nicht zu stimmen. Also nochmal, Für dieses Feld soll das , als Delimiter ignoriert werden, weil Komma bedeutet ja neue Spalte.

 

 

lg

 

 

Stef

 

Edited by stefan4711
Link to post

ok sorry war mein Fehler, es lag wohl an meiner nächsten csv Spalte

'SMB'                   =$smbt -replace ".{1}$";

 

Die Apostrophs hab ich jetzt auch weg, habe einfach das "`-",  jeweils gelöscht

 

 

 

lg und danke nochmals

 

 

stef

Edited by stefan4711
Link to post

So eine letzte Frage noch, eigentlich nur noch nen Schönheitsfehler, bin ich leider auch nicht zu fündige geworden, dann bin ich erst mal glücklich. Was ist wenn in diesem Description Feld Umlaute drin stehen, kann man dass irgendwie gerade rücken?

 

 

lg

 

 

Stef

Link to post
vor 2 Minuten schrieb stefan4711:

kann man dass irgendwie gerade rücken?

Was verstehst Du darunter? Wenn Du damit meinst, ob man die Umlaute gegen die entsprechende Buchstabenkombination ohne Umlaute ersetzen kann .... ja, klar ... geht. ;-) 

Edited by BOfH_666
Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...