Je dois regarder les dernières lignes d'un grand fichier (la taille typique est de 500 Mo à 2 Go). Je recherche un équivalent de la commande Unix tail
pour Windows Powershell. Quelques alternatives disponibles sur,
http://tailforwin32.sourceforge.net/
et
Get-Content [nom de fichier] | Select-Object -Last 10
Pour moi, il n'est pas autorisé d'utiliser la première alternative, et la deuxième alternative est lente. Quelqu'un connaît-il une implémentation efficace de tail pour PowerShell?
windows
powershell
tail
mutelogan
la source
la source
tail
commande fournie dans sourceforge.net/projects/unxutils/files/unxutils/current/… ?Get-Content [filename] -last 10
et d'ajouter-tail
pour -fRéponses:
Utilisez le
-wait
paramètre avec Get-Content, qui affiche les lignes à mesure qu'elles sont ajoutées au fichier. Cette fonctionnalité était présente dans PowerShell v1, mais pour une raison quelconque, elle n'était pas bien documentée dans la v2.Voici un exemple
Une fois que vous avez exécuté cela, mettez à jour et enregistrez le fichier et vous verrez les modifications sur la console.
la source
man gc -par wait
me dit qu'il n'y a pas de paramètre. Mais je pense que cela ne résout pas le problème que pose le PO, car ils l'ont demandétail
, nontail -f
et une mise en œuvre efficace également. Étant donné que celui-ci lit également le fichier complet avant de renvoyer les dernières lignes, cela est pénible pour les tailles de fichier attendues.Pour être complet, je mentionnerai que Powershell 3.0 a maintenant un indicateur -Tail sur Get-Content
obtient les 10 dernières lignes du fichier
obtient les 10 dernières lignes du fichier et attend plus
En outre, pour les utilisateurs * nix, notez que la plupart des systèmes alias chat à Get-Content, donc ce généralement des œuvres
la source
Get-Content .\test.txt -Wait -Tail 1
Get-Content -Path .\sync.log -Wait -Tail 10
-Wait
paramètre n'a-t-il pas fonctionné pour vous?À partir de PowerShell version 3.0, l'applet de commande Get-Content a un paramètre -Tail qui devrait vous aider. Consultez l'aide en ligne de la bibliothèque technet pour Get-Content.
la source
J'ai utilisé certaines des réponses données ici, mais juste un avertissement
va mâcher la mémoire après un certain temps. Un collègue a laissé une telle "queue" au cours de la dernière journée et elle est passée à 800 Mo. Je ne sais pas si la queue Unix se comporte de la même manière (mais j'en doute). Il est donc très bien d'utiliser pour des applications à court terme, mais soyez prudent avec elle.
la source
Les extensions de communauté PowerShell (PSCX) fournissent l'
Get-FileTail
applet de commande . Cela ressemble à une solution adaptée à la tâche. Remarque: je ne l'ai pas essayé avec des fichiers extrêmement volumineux, mais la description indique qu'il contient efficacement le contenu et qu'il est conçu pour les fichiers journaux volumineux.la source
Get-Content [filename] | Select-Object -Last 10
elle ne peut pas être abandonnéeJuste quelques ajouts aux réponses précédentes. Il existe des alias définis pour Get-Content, par exemple si vous êtes habitué à UNIX, vous pourriez aimer
cat
, et il y a aussitype
etgc
. Donc au lieu detu peux écrire
la source
À l'aide de Powershell V2 et des versions antérieures, get-content lit l'intégralité du fichier, il ne m'a donc pas été utile. Le code suivant fonctionne pour ce dont j'avais besoin, bien qu'il y ait probablement des problèmes avec les encodages de caractères. Il s'agit en fait de tail -f, mais il peut être facilement modifié pour obtenir les derniers x octets ou les dernières x lignes si vous souhaitez rechercher des sauts de ligne en arrière.
J'ai trouvé la plupart du code pour le faire ici .
la source
J'ai pris la solution de @ hajamie et l'ai enveloppée dans un wrapper de script légèrement plus pratique.
J'ai ajouté une option pour commencer à partir d'un décalage avant la fin du fichier, afin que vous puissiez utiliser la fonctionnalité de type queue de lecture d'une certaine quantité à partir de la fin du fichier. Notez que le décalage est en octets, pas en lignes.
Il existe également une option pour continuer à attendre plus de contenu.
Exemples (en supposant que vous l'enregistrez sous TailFile.ps1):
Et voici le script lui-même ...
la source
essayer
Windows Server 2003 Resource Kit Tools
il contient un
tail.exe
qui peut être exécuté sur le système Windows.https://www.microsoft.com/en-us/download/details.aspx?id=17657
la source
Très basique, mais fait ce dont vous avez besoin sans modules supplémentaires ou exigences de version PS:
while ($true) {Clear-Host; gc E:\test.txt | select -last 3; sleep 2 }
la source
while($true) { Clear-Host; Get-Content <filename> -tail 40; sleep 1 }
:)Probablement trop tard pour une réponse mais essayez celle-ci
la source
Il y a eu de nombreuses réponses valides, cependant, aucune d'entre elles n'a la même syntaxe que tail dans linux . La fonction suivante peut être stockée dans votre
$Home\Documents\PowerShell\Microsoft.PowerShell_profile.ps1
pour la persistance (voir la documentation des profils PowerShell pour plus de détails).Cela vous permet d'appeler ...
ce qui est assez proche de la syntaxe linux.
la source