(Herausgegeben auf n0rd Kommentare basiert mehr klar zu sein)
Es ist möglicherweise ein Speicherproblem sein. Da Sie die gesamte Datei in den Speicher laden, um sie zu sortieren (und den Overhead der Pipe in Sort-Object und die Pipe in Get-Unique zu addieren), ist es möglich, dass Sie die Speichergrenzen der Maschine erreichen und erzwingen um auf die Festplatte zu blättern, was die Dinge sehr verlangsamen wird. Eine Sache, die Sie in Betracht ziehen könnten, besteht darin, die Protokolle aufzuteilen, bevor sie sortiert werden, und sie dann wieder zusammenzufügen.
Das passt wahrscheinlich nicht genau zu Ihrem Format, aber wenn ich eine große Protokolldatei für, sagen wir, 16.08.2012 habe, die mehrere Stunden umfasst, kann ich sie für jede Stunde in eine andere Datei aufteilen mit so etwas wie folgt aus:
for($i=0; $i -le 23; $i++){ Get-Content .\u_ex120816.log | ? { $_ -match "^2012-08-16 $i`:" } | Set-Content -Path "$i.log" }
Dies ist ein regulärer Ausdruck für jede Stunde des Tages zu schaffen und alle die passenden Log-Einträge in eine kleinere Protokolldatei von der Stunde genannt Dumping (zB 16.log, 17.log) . sie
for($i=0; $i -le 23; $i++){ Get-Content "$i.log" | sort | get-unique > "$isorted.txt" }
Und dann können Sie splice wieder zusammen:
Dann wird Ihr Prozess des Sortierens und immer eindeutige Einträge in einem viel kleineren Teilmengen, die viel laufen soll schneller laufen kann ich.
Je nach der Häufigkeit der Protokolle kann es sinnvoller sein, sie nach Tag oder Minute aufzuteilen; die Hauptsache ist, sie in überschaubare Brocken zum Sortieren zu bringen.
Auch dies macht nur Sinn, wenn Sie die Speichergrenzen des Computers treffen (oder wenn Sort-Object einen wirklich ineffizienten Algorithmus verwendet).
habe ich versucht, den Befehl über und es dauerte in der Tat eine lange Zeit (ca. 10 Minuten auf 460 MB), und das Endergebnis war nicht das, was ich brauchte, und die Zieldatei ('sorted.txt') beendete die Größe zweimal nach oben von der Quelle. –
Die Größenunterschiede sind wahrscheinlich auf unterschiedliche Codierungen zurückzuführen. Ersetzen Sie die '> sorted.txt' durch etwas wie' | Set-Content sorted.txt' könnte den Trick machen, sonst könnten Sie '| versuchen Out-File sorted.txt -Encoding '. –
notjustme
Mit Ihrem Vorschlag '| Set-Content sort.txt' half dabei, es richtig zu sortieren, aber es ist immer noch ziemlich langsam. Das Hinzufügen von '-ReadCount 5000' nach' Get-Content' macht zwar viel schneller, aber die Sortierung ist kaputt. Ich schätze, um richtig sortieren zu können, müssen wir Zeile für Zeile und nicht Block für Block lesen ... Ich wünschte, es gäbe einen effizienteren Weg. –