banzai123

Mit Powershell große Dateien durchsuchen

Hallo zusammen,

entweder suche ich falsch, oder die Frage wurde so noch nicht gestellt...

Ich muss in mehreren 100.000en von csv-Dateien (einige viele > 100 MB, in Summe sind es 100 GB) nach mehreren 1000 Nummern suchen. Mit meinem Powershell-Skript bin ich mit kleinen Test-Mengen gut gefahren, aber bei der gesamten Menge bin ich mir nicht sicher, ob das so zielführend ist, was ich da mache.
Der relevante Code-Teil sieht so aus:
foreach($file in $files) {
   foreach($nr in $nummern) {
      $ergebnis = select-string $file -pattern -$nr - list | select-object -expandproperty path
      if($ergebnis) {
         $ergebnis >> ergebnisdatei.txt
      }
   }
}

Es reicht völlig, die Fundstellen in eine Text-Datei zu schreiben, denn es werden wahrscheinlich nicht mehr als 1000 werden.

Auf diese Art und Weise konnten in den letzten 24 Stunden gerade mal 9 GB abgearbeitet werden. Wenn das nun eine einmalige Sache wäre, würde ich sagen, ich lass es dabei und warte einfach, aber es kann sein, dass das künftig öfter mal gemacht werden muss (fragt bitte nicht, warum mit so "hemdsärmeligen Mitteln" solche Datenmassen durchsucht werden müssen - es ist nun mal so).

Ich sollte noch dazu sagen, dass ich weder Entwicklerin noch SysAdmin bin, sondern eher jemand mit ein paar grundlegenden Programmierkenntnissen, aber wohl die einzige in dem Laden, die überhaupt "so weit" kommt. Daher meine Frage, könnt ihr mir einen performanteren Weg empfehlen? Wäre Python dafür vielleicht besser geeignet? Ich höre nur immer, wie toll Python sein soll, aber habe noch 0 Erfahrung damit und gerade keine Zeit, Zeit in eine Sprache zu investieren, die am Ende nicht zur Lösung meines Problems beitragen kann.

Vielen Dank vorab und viele Grüße
banzai123
Auf Facebook teilen
Auf X (Twitter) teilen
Auf Reddit teilen
Auf Linkedin teilen

Content-ID: 600807

Url: https://administrator.de/forum/mit-powershell-grosse-dateien-durchsuchen-600807.html

Ausgedruckt am: 04.05.2025 um 20:05 Uhr

145033
145033 30.08.2020 aktualisiert um 10:16:00 Uhr
Goto Top
Deine Abfrage lässt sich noch um einiges optimieren, so ist nur ein einziger Select-String Aufruf pro Datei nötig
$ordner = "d:\Ordner"  
$nummern = "123","456","789"  
ls $ordner -File -Recurse -Filter *.csv | select-string -Pattern $nummern -SimpleMatch -List | select -Expand Path | out-file result.txt
Sind alle Dateien in einem einzigen Ordner und nicht in Unterordnern verachachtelt dann geht auch
$ordner = "d:\Ordner"  
$nummern = "123","456","789"  
select-string -Path "$ordner\*.csv" -Pattern $nummern -SimpleMatch -List | select -Expand Path | out-file result.txt  
banzai123
banzai123 30.08.2020 um 11:24:54 Uhr
Goto Top
Danke dir!
Ich hab meinen Code entsprechend angepasst und bin nun sehr gespannt, wie schnell es jetzt vorwärts geht.

Viele Grüße
banzai123