Ich muss mir die letzten Zeilen einer großen Datei ansehen (typische Größe ist 500 MB-2 GB). Ich suche nach einem Äquivalent des Unix-Befehls tail
für Windows Powershell. Einige Alternativen sind:
http://tailforwin32.sourceforge.net/
und
Get-Content [Dateiname] | Select-Object -Last 10
Für mich ist es nicht erlaubt, die erste Alternative zu verwenden, und die zweite Alternative ist langsam. Kennt jemand eine effiziente Implementierung von Tail für PowerShell?
windows
powershell
tail
mutelogan
quelle
quelle
tail
in sourceforge.net/projects/unxutils/files/unxutils/current/… bereitgestellten Befehl nicht verwenden können ?Get-Content [filename] -last 10
und-tail
für -fAntworten:
Verwenden Sie den
-wait
Parameter mit Get-Content, der Zeilen anzeigt, wenn sie der Datei hinzugefügt werden. Diese Funktion war in PowerShell v1 vorhanden, wurde jedoch aus irgendeinem Grund in v2 nicht gut dokumentiert.Hier ist ein Beispiel
Sobald Sie dies ausführen, aktualisieren und speichern Sie die Datei und Sie werden die Änderungen auf der Konsole sehen.
quelle
man gc -par wait
sagt mir aber, dass es keinen Parameter gibt. Aber ich denke, dies löst nicht das Problem, das das OP hat, da es darum gebeten hattail
, nichttail -f
und auch eine effiziente Implementierung. Da dieser auch die gesamte Datei liest, bevor die letzten Zeilen zurückgegeben werden, ist dies für die erwarteten Dateigrößen schmerzhaft.Der Vollständigkeit halber werde ich erwähnen, dass Powershell 3.0 jetzt ein -Tail-Flag auf Get-Content hat
Ruft die letzten 10 Zeilen der Datei ab
Ruft die letzten 10 Zeilen der Datei ab und wartet auf weitere
Auch für den * nix - Benutzer zu beachten , dass die meisten Systeme alias Katze auf Get-Content, so dass diese in der Regel Werke
quelle
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
Parameter bei Ihnen nicht funktioniert?Ab PowerShell Version 3.0 verfügt das Cmdlet Get-Content über einen -Tail- Parameter, der hilfreich sein sollte. Siehe die TechNet - Bibliothek Microsoft Online - Hilfe für Get-Content.
quelle
Ich habe einige der hier gegebenen Antworten verwendet, aber nur einen Hinweis darauf
wird nach einer Weile die Erinnerung zerkauen. Ein Kollege hat am letzten Tag einen solchen "Schwanz" hinterlassen und er stieg auf 800 MB. Ich weiß nicht, ob sich Unix Tail genauso verhält (aber ich bezweifle es). Es ist also in Ordnung, es für kurzfristige Anwendungen zu verwenden, aber seien Sie vorsichtig damit.
quelle
PowerShell Community Extensions (PSCX) stellt das
Get-FileTail
Cmdlet bereit . Es sieht nach einer geeigneten Lösung für die Aufgabe aus. Hinweis: Ich habe es nicht mit extrem großen Dateien versucht, aber die Beschreibung besagt, dass es den Inhalt effizient zusammenfasst und für große Protokolldateien ausgelegt ist.quelle
Get-Content [filename] | Select-Object -Last 10
kann nicht abgebrochen werdenNur einige Ergänzungen zu früheren Antworten. Für Get-Content sind Aliase definiert, z. B. wenn Sie an UNIX gewöhnt sind
cat
, und es gibt auchtype
undgc
. Also stattDu kannst schreiben
quelle
Mit Powershell V2 und niedriger liest get-content die gesamte Datei, sodass es für mich keinen Nutzen hatte. Der folgende Code funktioniert für das, was ich brauchte, obwohl es wahrscheinlich einige Probleme mit der Zeichencodierung gibt. Dies ist effektiv tail -f, kann jedoch leicht geändert werden, um die letzten x Bytes oder die letzten x Zeilen abzurufen, wenn Sie rückwärts nach Zeilenumbrüchen suchen möchten.
Ich habe den größten Teil des Codes dafür hier gefunden .
quelle
Ich nahm die Lösung von @ hajamie und wickelte sie in einen etwas bequemeren Skript-Wrapper ein.
Ich habe eine Option hinzugefügt, um von einem Versatz vor dem Ende der Datei zu beginnen, damit Sie die Schwanz-ähnliche Funktionalität verwenden können, um einen bestimmten Betrag vom Ende der Datei zu lesen. Beachten Sie, dass der Offset in Bytes und nicht in Zeilen angegeben ist.
Es besteht auch die Möglichkeit, weiter auf weitere Inhalte zu warten.
Beispiele (vorausgesetzt, Sie speichern dies als TailFile.ps1):
Und hier ist das Drehbuch selbst ...
quelle
Versuchen
Windows Server 2003 Resource Kit Tools
Es enthält eine,
tail.exe
die auf Windows-System ausgeführt werden kann.https://www.microsoft.com/en-us/download/details.aspx?id=17657
quelle
Sehr einfach, macht aber das, was Sie brauchen, ohne Addon-Module oder PS-Versionsanforderungen:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
quelle
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Wahrscheinlich zu spät für eine Antwort, aber versuchen Sie es mit dieser
quelle
Es gab viele gültige Antworten, aber keine von ihnen hat die gleiche Syntax wie tail unter Linux . Die folgende Funktion kann aus Gründen der
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
Persistenz in Ihrem gespeichert werden ( weitere Informationen finden Sie in der Dokumentation zu Powershell-Profilen ).So können Sie anrufen ...
Das kommt der Linux-Syntax ziemlich nahe.
quelle