Tengo que mirar las últimas líneas de un archivo grande (el tamaño típico es de 500 MB a 2 GB). Estoy buscando un equivalente del comando Unix tail
para Windows Powershell. Algunas alternativas disponibles en son,
http://tailforwin32.sourceforge.net/
y
Obtener contenido [nombre de archivo] | Seleccionar-Objeto -Los últimos 10
Para mí, no está permitido usar la primera alternativa, y la segunda alternativa es lenta. ¿Alguien sabe de una implementación eficiente de tail para PowerShell?
windows
powershell
tail
mutelogan
fuente
fuente
tail
comando proporcionado en sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
y agregar-tail
para -fRespuestas:
Use el
-wait
parámetro con Get-Content, que muestra líneas a medida que se agregan al archivo. Esta característica estaba presente en PowerShell v1, pero por alguna razón no está bien documentada en v2.Aquí hay un ejemplo
Una vez que ejecute esto, actualice y guarde el archivo y verá los cambios en la consola.
fuente
man gc -par wait
me dice que no hay ningún parámetro. Pero creo que esto no resuelve el problema que tiene el OP, ya que lo pidierontail
,tail -f
y tampoco una implementación eficiente. Como este también lee el archivo completo antes de devolver las últimas líneas, esto es doloroso para los tamaños de archivo que esperan.Para completar, mencionaré que Powershell 3.0 ahora tiene un indicador de cola en Get-Content
obtiene las últimas 10 líneas del archivo
obtiene las últimas 10 líneas del archivo y espera más
Además, para aquellos usuarios * nix, nota que la mayoría de los sistemas de alias gato a Get-contenido, por lo que esto funciona normalmente
fuente
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
parámetro no funcionó para usted?A partir de PowerShell versión 3.0, el cmdlet Get-Content tiene un parámetro -Tail que debería ayudar. Consulte la ayuda en línea de la biblioteca de Technet para obtener contenido.
fuente
Utilicé algunas de las respuestas dadas aquí, pero solo un aviso
masticará la memoria después de un tiempo. Un colega dejó tal "cola" en el último día y subió a 800 MB. No sé si la cola de Unix se comporta de la misma manera (pero lo dudo). Por lo tanto, está bien usarlo para aplicaciones a corto plazo, pero tenga cuidado con eso.
fuente
PowerShell Community Extensions (PSCX) proporciona el
Get-FileTail
cmdlet . Parece una solución adecuada para la tarea. Nota: No lo probé con archivos extremadamente grandes, pero la descripción dice que ajusta eficientemente los contenidos y está diseñado para archivos de registro grandes.fuente
Get-Content [filename] | Select-Object -Last 10
no puede ser abortadoSolo algunas adiciones a respuestas anteriores. Hay alias definidos para Get-Content, por ejemplo, si está acostumbrado a UNIX que le gustaría
cat
, y también haytype
ygc
. Entonces en lugar depuedes escribir
fuente
Usando Powershell V2 y versiones posteriores, get-content lee el archivo completo, por lo que no me sirvió de nada. El siguiente código funciona para lo que necesitaba, aunque es probable que haya algunos problemas con las codificaciones de caracteres. Esto es efectivamente tail -f, pero podría modificarse fácilmente para obtener los últimos x bytes, o las últimas x líneas si desea buscar saltos de línea hacia atrás.
Encontré la mayor parte del código para hacer esto aquí .
fuente
Tomé la solución de @hajamie y la envolví en un contenedor de script un poco más conveniente.
Agregué una opción para comenzar desde un desplazamiento antes del final del archivo, para que pueda usar la funcionalidad de cola de leer una cierta cantidad desde el final del archivo. Tenga en cuenta que el desplazamiento está en bytes, no en líneas.
También hay una opción para seguir esperando más contenido.
Ejemplos (suponiendo que guarde esto como TailFile.ps1):
Y aquí está el guión en sí ...
fuente
tratar
Windows Server 2003 Resource Kit Tools
contiene uno
tail.exe
que se puede ejecutar en el sistema Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
fuente
Muy básico, pero hace lo que necesita sin ningún módulo adicional o requisitos de versión PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
fuente
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Probablemente sea demasiado tarde para una respuesta pero, prueba esta
fuente
Ha habido muchas respuestas válidas, sin embargo, ninguna de ellas tiene la misma sintaxis que tail en Linux . La siguiente función se puede almacenar en su
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
persistencia (consulte la documentación de los perfiles de PowerShell para obtener más detalles).Esto le permite llamar ...
que se acerca bastante a la sintaxis de Linux.
fuente