Eu tenho que olhar para as últimas linhas de um arquivo grande (o tamanho típico é 500MB-2GB). Estou procurando um equivalente do comando Unix tail
para o Windows Powershell. Algumas alternativas disponíveis são:
http://tailforwin32.sourceforge.net/
e
Get-Content [nome do arquivo] | Select-Object -Último 10
Para mim, não é permitido usar a primeira alternativa, e a segunda alternativa é lenta. Alguém sabe de uma implementação eficiente de cauda para o PowerShell.
windows
powershell
tail
mutelogan
fonte
fonte
tail
comando fornecido em sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
e adicionar-tail
para -fRespostas:
Use o
-wait
parâmetro com Get-Content, que exibe as linhas à medida que são adicionadas ao arquivo. Esse recurso estava presente no PowerShell v1, mas por algum motivo não foi bem documentado na v2.Aqui está um exemplo
Depois de executar isso, atualize e salve o arquivo e você verá as alterações no console.
fonte
man gc -par wait
me diz que não há parâmetro. Mas acho que isso não resolve o problema que o OP tem, já que eles pediramtail
,tail -f
e não uma implementação eficiente também. Como este também lê o arquivo completo antes de retornar as últimas linhas, isso é doloroso para os tamanhos de arquivo que eles esperam.Para completar, mencionarei que o Powershell 3.0 agora tem um sinalizador -Tail em Get-Content
obtém as últimas 10 linhas do arquivo
obtém as últimas 10 linhas do arquivo e aguarda mais
Além disso, para aqueles usuários * nix, nota que a maioria dos sistemas apelido gato para Get-Content, então Isto normalmente funciona
fonte
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
parâmetro não funcionou para você?No PowerShell versão 3.0, o cmdlet Get-Content possui um parâmetro -Tail que deve ajudar. Consulte a ajuda online da biblioteca technet para obter o conteúdo.
fonte
Eu usei algumas das respostas dadas aqui, mas apenas um aviso
irá consumir memória depois de um tempo. Um colega deixou essa "cauda" erguida no último dia e subiu para 800 MB. Não sei se a cauda do Unix se comporta da mesma maneira (mas duvido). Portanto, é bom usar para aplicativos de curto prazo, mas tenha cuidado com isso.
fonte
As extensões de comunidade do PowerShell (PSCX) fornecem o
Get-FileTail
cmdlet . Parece uma solução adequada para a tarefa. Nota: Eu não tentei com arquivos extremamente grandes, mas a descrição diz que domina eficientemente o conteúdo e foi projetada para arquivos de log grandes.fonte
Get-Content [filename] | Select-Object -Last 10
que não pode ser abortadoApenas algumas adições às respostas anteriores. Existem aliases definidos para Get-Content, por exemplo, se você estiver acostumado ao UNIX
cat
, e há tambémtype
egc
. Então, ao invés devocê pode escrever
fonte
Usando o Powershell V2 e abaixo, o get-content lê o arquivo inteiro, por isso não me serviu de nada. O código a seguir funciona para o que eu precisava, embora haja provavelmente alguns problemas com as codificações de caracteres. Isso é efetivamente tail -f, mas pode ser facilmente modificado para obter os últimos x bytes, ou as últimas x linhas, se você quiser procurar para trás por quebras de linha.
Encontrei a maior parte do código para fazer isso aqui .
fonte
Peguei a solução @ hajamie e envolvi-a em um wrapper de script um pouco mais conveniente.
Eu adicionei uma opção para iniciar a partir de um deslocamento antes do final do arquivo, para que você possa usar a funcionalidade semelhante à cauda de ler uma certa quantidade no final do arquivo. Observe que o deslocamento está em bytes, não em linhas.
Há também uma opção para continuar esperando por mais conteúdo.
Exemplos (supondo que você salve isso como TailFile.ps1):
E aqui está o próprio script ...
fonte
tentar
Windows Server 2003 Resource Kit Tools
Ele contém um
tail.exe
que pode ser executado no sistema Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
fonte
Muito básico, mas faz o que você precisa sem nenhum módulo adicional ou requisitos de versão PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
fonte
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Provavelmente tarde demais para uma resposta, mas tente esta
fonte
Houve muitas respostas válidas, no entanto, nenhuma delas tem a mesma sintaxe que a tail no linux . A seguinte função pode ser armazenada no seu
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
para persistência (consulte a documentação dos perfis do PowerShell para obter mais detalhes).Isso permite que você ligue para ...
que chega bem perto da sintaxe do linux.
fonte