Я должен посмотреть на последние несколько строк большого файла (типичный размер 500 МБ-2 ГБ). Я ищу эквивалент команды Unix tail
для Windows Powershell. Есть несколько альтернатив,
http://tailforwin32.sourceforge.net/
и
Get-Content [имя файла] | Выбор объекта -Последний 10
Для меня не разрешено использовать первую альтернативу, а вторая - медленная. Кто-нибудь знает эффективную реализацию хвоста для PowerShell.
windows
powershell
tail
mutelogan
источник
источник
tail
команду, указанную в sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
и добавить-tail
для -fОтветы:
Используйте
-wait
параметр с Get-Content, который отображает строки по мере их добавления в файл. Эта функция присутствовала в PowerShell v1, но по какой-то причине не была хорошо документирована в v2.Вот пример
После запуска обновите и сохраните файл, и вы увидите изменения на консоли.
источник
man gc -par wait
говорит мне, что нет параметра. Но я думаю, что это не решает проблему, с которой сталкивается ОП, поскольку они просили об этомtail
, а такжеtail -f
и эффективную реализацию. Поскольку этот файл также читает весь файл перед возвратом последних строк, это болезненно для ожидаемых размеров файлов.Для полноты я упомяну, что у Powershell 3.0 теперь есть флаг -Tail на Get-Content
получает последние 10 строк файла
получает последние 10 строк файла и ждет больше
Также, для тех пользователей * nix, обратите внимание, что в большинстве систем псевдоним cat относится к Get-Content, так что обычно это работает
источник
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
параметр не работает для вас?Начиная с PowerShell версии 3.0, командлет Get-Content имеет параметр -Tail, который должен помочь. См. Интерактивную справку библиотеки technet для Get-Content.
источник
Я использовал некоторые из ответов, приведенных здесь, но только на голову, что
будет жевать память через некоторое время. За последний день коллега оставил такой «хвост», и он поднялся до 800 МБ. Я не знаю, ведет ли себя хвост Unix таким же образом (но я сомневаюсь в этом). Так что это хорошо для краткосрочных приложений, но будьте осторожны с этим.
источник
Расширения сообщества PowerShell (PSCX) предоставляют
Get-FileTail
командлет . Похоже, подходящее решение для задачи. Примечание: я не пробовал это с очень большими файлами, но в описании сказано, что оно эффективно подгоняет содержимое и предназначено для больших файлов журнала.источник
Get-Content [filename] | Select-Object -Last 10
него нельзя прервать егоПросто некоторые дополнения к предыдущим ответам. Есть псевдонимы, определенные для Get-Content, например, если вы привыкли к UNIX, который вам может понравиться
cat
, а также естьtype
иgc
. Так что вместоты можешь написать
источник
Используя Powershell V2 и ниже, get-content читает весь файл, поэтому он мне не пригодился. Следующий код работает для того, что мне нужно, хотя, вероятно, есть некоторые проблемы с кодировкой символов. Это фактически tail -f, но его можно легко изменить, чтобы получить последние x байтов или последние x строк, если вы хотите искать разрывы строк в обратном направлении.
Я нашел большую часть кода, чтобы сделать это здесь .
источник
Я взял решение @ hajamie и обернул его в немного более удобную оболочку сценария.
Я добавил опцию, чтобы начать со смещения до конца файла, чтобы вы могли использовать хвостовую функциональность считывания определенной суммы с конца файла. Обратите внимание, что смещение указывается в байтах, а не в строках.
Также есть возможность продолжить ожидание большего количества контента.
Примеры (при условии, что вы сохраните это как TailFile.ps1):
А вот и сам сценарий ...
источник
пытаться
Windows Server 2003 Resource Kit Tools
он содержит
tail.exe
который можно запустить в системе Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
источник
Очень простой, но делает то, что вам нужно, без каких-либо дополнительных модулей или требований к версии PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
источник
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Возможно, слишком поздно для ответа, но попробуйте этот
источник
Было много правильных ответов, однако ни один из них не имеет такой же синтаксис, как tail в linux . Следующая функция может быть сохранена в вашем
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
для постоянства (см. Документацию профилей PowerShell более подробную информацию к ).Это позволяет вам звонить ...
что довольно близко к синтаксису Linux.
источник