Ich muss die letzten n Zeilen von riesigen Dateien (1-4 Gb) in Windows 7 abrufen. Aufgrund von Unternehmensbeschränkungen kann ich keinen Befehl ausführen, der nicht integriert ist. Das Problem ist, dass alle gefundenen Lösungen die ganze Datei zu lesen scheinen, also sind sie extrem langsam.
Kann dies schnell erreicht werden?
Anmerkungen:
Lösungen hier Unix-Tail-Äquivalent-Befehl in Windows Powershell nicht Arbeit.
Die Verwendung von -wait
macht es nicht schnell. Ich habe -tail
nicht (und ich weiß nicht, ob es schnell geht).
PS: Es gibt einige verwandte Fragen für head
und tail
, aber nicht das Thema Geschwindigkeit. Daher sind nützliche oder akzeptierte Antworten hier möglicherweise nicht nützlich. Z. B.
Windows entspricht dem Befehl "tail"
CMD.EXE Batch-Skript zum Anzeigen der letzten 10 Zeilen aus einer TXT-Datei
Extrahiere N Zeilen aus der Datei mit dem Befehl single windows
Wie wäre es damit (liest die letzten 8 Bytes für eine Demo):
%Vor%UPDATE Um Bytes als String zu interpretieren (aber achten Sie darauf, die richtige Kodierung zu wählen - hier wird UTF8 verwendet):
%Vor%UPDATE 2 . Um die letzten M Zeilen zu lesen, lesen wir die Datei nach Abschnitten, bis mehr als M Zeilenumbruchzeichenfolgen im Ergebnis sind:
%Vor% Versuchen Sie, mit größerer $buffer_size
zu spielen - dies entspricht idealerweise der erwarteten durchschnittlichen Zeilenlänge, um weniger Festplattenoperationen durchzuführen. Achten Sie auch auf $ seq - dies könnte \r\n
oder nur \n
sein.
Dies ist sehr schmutziger Code ohne Fehlerbehandlung und Optimierungen.
Wenn Sie PowerShell 3 oder höher haben, können Sie den Parameter -Tail
für Get-Content
verwenden, um die letzten n
-Zeilen zu erhalten.
Bei einer 34-MB-Textdatei auf meiner lokalen SSD kam dies in 1 Millisekunde vs. 8,5 Sekunden für get-content |select -last 5
Dies ist keine Antwort, sondern ein großer Kommentar als Antwort auf die Antwort von sancho.s.
Wenn Sie kleine PowerShell-Skripts aus einer Batch-Datei verwenden möchten, empfehle ich Ihnen, die folgende Methode zu verwenden, die einfacher ist und den gesamten Code in derselben Batch-Datei speichern kann:
%Vor%Mit der großartigen Antwort von Aziz Kabyshev , die das Problem der Geschwindigkeit löst, und mit etwas Googeln, endete ich mit diesem Skript
%Vor%Ich rufe von einer Batchdatei auf, die
enthält %Vor%(Danke an So führen Sie ein PowerShell-Skript aus aus einer Batch-Datei ).
Tags und Links windows powershell batch-file tail