Muszę spojrzeć na kilka ostatnich wierszy dużego pliku (typowy rozmiar to 500 MB-2 GB). Szukam odpowiednika polecenia Unix tail
dla Windows Powershell. Kilka dostępnych alternatyw to:
http://tailforwin32.sourceforge.net/
i
Get-Content [nazwa pliku] | Wybierz obiekt - ostatni 10
Dla mnie nie wolno używać pierwszej alternatywy, a druga alternatywa jest powolna. Czy ktoś wie o skutecznej implementacji taila dla PowerShell.
windows
powershell
tail
mutelogan
źródło
źródło
tail
polecenia podanego w sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
i dodać-tail
dla -fOdpowiedzi:
Użyj
-wait
parametru z Get-Content, który wyświetla linie w miarę ich dodawania do pliku. Ta funkcja była obecna w PowerShell v1, ale z jakiegoś powodu nie została dobrze udokumentowana w v2.Oto przykład
Po uruchomieniu zaktualizuj i zapisz plik, a zobaczysz zmiany na konsoli.
źródło
man gc -par wait
mówi mi, że nie ma parametru. Myślę jednak, że to nie rozwiązuje problemu PO, ponieważ o to prosilitail
,tail -f
a także skutecznego wdrożenia. Ponieważ ten odczytuje również cały plik przed zwróceniem ostatnich wierszy, jest to bolesne dla oczekiwanych rozmiarów plików.Dla kompletności wspomnę, że Powershell 3.0 ma teraz flagę -Tail na Get-Content
pobiera ostatnie 10 linii pliku
pobiera ostatnie 10 wierszy pliku i czeka na więcej
Ponadto, dla tych użytkowników * nix, zauważ, że większość systemów aliasów cat na Get-Content, więc to zwykle działa
źródło
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
parametr nie działał dla Ciebie?Od wersji PowerShell 3.0 cmdlet Get-Content ma parametr -Tail , który powinien pomóc. Zobacz pomoc online biblioteki technet dotyczącą Get-Content.
źródło
Użyłem niektórych z podanych tutaj odpowiedzi, ale tylko na pierwszy rzut oka
po chwili przeżuje pamięć. Kolega zostawił taki „ogon” w ciągu ostatniego dnia i wzrósł do 800 MB. Nie wiem, czy ogon uniksowy zachowuje się w ten sam sposób (ale wątpię w to). Dlatego dobrze jest używać do krótkoterminowych aplikacji, ale bądź ostrożny.
źródło
Rozszerzenia społeczności programu PowerShell (PSCX) zapewniają polecenie
Get-FileTail
cmdlet . Wygląda na odpowiednie rozwiązanie do tego zadania. Uwaga: nie próbowałem tego z bardzo dużymi plikami, ale opis mówi, że skutecznie ogona zawartości i jest przeznaczony do dużych plików dziennika.źródło
Get-Content [filename] | Select-Object -Last 10
nie można go przerwaćKilka dodatków do poprzednich odpowiedzi. Istnieją zdefiniowane aliasy dla Get-Content, na przykład jeśli jesteś przyzwyczajony do systemu UNIX, który może ci się spodobać
cat
, a także istniejątype
igc
. Więc zamiastMożesz pisać
źródło
Korzystając z Powershell V2 i niższych, get-content czyta cały plik, więc nie przydało mi się to. Poniższy kod działa w przypadku tego, czego potrzebowałem, chociaż prawdopodobnie występują pewne problemy z kodowaniem znaków. Jest to efektywnie tail -f, ale można go łatwo zmodyfikować, aby uzyskać ostatnie x bajtów lub ostatnie x linii, jeśli chcesz szukać podziałów linii wstecz.
Znalazłem większość kodu, aby to zrobić tutaj .
źródło
Wziąłem rozwiązanie @ hajamie i zapakowałem je w nieco wygodniejsze opakowanie skryptu.
Dodałem opcję, aby zacząć od przesunięcia przed końcem pliku, abyś mógł skorzystać z podobnej do ogona funkcji odczytu pewnej ilości z końca pliku. Uwaga: przesunięcie jest w bajtach, a nie w liniach.
Istnieje również opcja kontynuowania oczekiwania na więcej treści.
Przykłady (zakładając, że zapisujesz to jako TailFile.ps1):
A oto sam skrypt ...
źródło
próbować
Windows Server 2003 Resource Kit Tools
zawiera program,
tail.exe
który można uruchomić w systemie Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
źródło
Bardzo prosty, ale robi to, czego potrzebujesz, bez żadnych modułów dodatkowych lub wymagań wersji PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
źródło
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Prawdopodobnie za późno na odpowiedź, ale spróbuj tego
źródło
Było wiele poprawnych odpowiedzi, jednak żadna z nich nie ma takiej samej składni jak tail w systemie Linux . Poniższa funkcja może być przechowywana w twoim serwerze w
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
celu zachowania trwałości ( więcej informacji znajduje się w dokumentacji profili programu PowerShell ).To pozwala dzwonić ...
co jest bardzo zbliżone do składni linuksowej.
źródło