Existe-t-il un moyen de simuler la commande * nix tail sur la ligne de commande Windows? J'ai un fichier et je veux un moyen de couper les premières lignes de texte n. Par exemple:
D:\>type file.txt
line one
line two
line three
D:\>*[call to tail]* > result.txt
D:\>type result.txt
line two
line three
Pas d'équivalent exact. Cependant, il existe une commande DOS native "more" qui a une option + n qui commencera à sortir le fichier après la nième ligne:
Invite DOS:
C:\>more +2 myfile.txt
La commande ci-dessus affichera tout après les 2 premières lignes.
C’est en fait l’inverse d’Unix head :
Console Unix:
root@server:~$ head -2 myfile.txt
La commande ci-dessus n’imprimera que les 2 premières lignes du fichier.
SI vous avez Windows PowerShell installé (je pense qu'il est inclus depuis XP), vous pouvez simplement exécuter à partir de cmd.exe:
Commandement principal:
powershell -command "& {Get-Content *filename* -TotalCount *n*}"
Commande de queue:
powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"
ou directement à partir de PowerShell:
Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*
mettre à jour
PowerShell 3.0 (Windows 8 et versions supérieures) a ajouté la commande Tail
avec un alias Last
.Head
et First
à TotalCount
.
Ainsi, les commandes peuvent être ré-écrites comme
Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*
more /e filename.txt P n
où n = le nombre de lignes à afficher. Fonctionne rapidement et correspond exactement à la commande head
.
C'est un piratage total, mais si c'est un gros fichier que vous voulez simplement examiner le format, l'en-tête, etc. et que vous cherchez une solution, vous pouvez toujours rediriger simplement la sortie 'plus' vers un nouveau fichier et CTRL-C rapidement. Les lignes de sortie ne peuvent pas être contrôlées avec précision et vous les tuez probablement au milieu d'une ligne de sortie, mais c'est un moyen peu coûteux de récupérer un petit fichier inutilisable.
Ex.
C:\more test.csv> test.txt
^ C C:\plus test.txt
ligne 1
ligne 2
etc ...... C:\
Lorsque vous utilisez plus de + n déjà mentionnés par Matt, essayez ceci pour éviter les pauses dans les longs fichiers:
plus +1 monfichier.txt> con
Lorsque vous redirigez la sortie de plus, cela ne fait pas de pause - et vous redirigez ici vers la console. De même, vous pouvez rediriger vers un autre fichier comme celui-ci sans les pauses de plus si tel est votre résultat final souhaité. Utilisez> pour rediriger vers un fichier et le remplacer s'il existe déjà, ou >> pour l'ajouter à un fichier existant. (Peut utiliser soit pour rediriger vers con.)
Eh bien, ceci va le le faire, mais il est à peu près aussi rapide qu’il est (approximativement O (n * m), où n est le nombre de lignes à afficher et m le nombre total de lignes dans le fichier):
for /l %l in (1,1,10) do @for /f "tokens=1,2* delims=:" %a in ('findstr /n /r "^" filename ^| findstr /r "^%l:"') do @echo %b
Où "10" est le nombre de lignes que vous souhaitez imprimer et "nom_fichier" est le nom du fichier.
Get-content -Tail n file.txt
avec powershell est la seule chose qui se rapproche de tail
dans linux.
Le Get-Content *filename* | Select-Object -last *n*
suggéré ci-dessus charge/analyse le tout. Inutile de dire que mon fichier journal de 10 Go ne me convenait pas… L'option -Tail
commence à la fin du fichier.
vous pouvez aussi utiliser Git bash où la tête et la queue sont également imitées
Powershell:
Get-Content C:\logs\result.txt -Tail 10
Get-Content C:\logs\result.txt -wait (monitor the tail)
Vous pouvez télécharger un kit de ressources ici: http://www.Microsoft.com/downloads/en/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=en
Il contient un outil tail.exe mais il n’est compatible qu’avec certaines versions de Windows.
(Copié de cet article: Commande Tail pour Windows )
Si vous voulez la commande head, un moyen facile de l'obtenir est d'installer Cygwin. Vous aurez alors tous les outils UNIX à votre disposition.
Si ce n'est pas une bonne solution, vous pouvez alors utiliser findstr et rechercher l'indicateur de fin de ligne.
findstr sur MSDN: http://technet.Microsoft.com/en-us/library/bb490907.aspx
Il existe un utilitaire gratuit head
sur cette page que vous pouvez utiliser. Je n'ai pas encore essayé.
Je n'ai pas essayé d'extraire une plage, mais j'ai pu obtenir une ligne à l'aide de la commande DOS suivante:
find /N " " *.log|find "[6]"
Comme la plupart des fichiers contiennent des espaces, cette commande extrait toutes les lignes de tous les fichiers LOG et les numérote à partir de 1 pour chaque fichier. Les résultats numérotés sont ensuite acheminés dans la seconde commande FIND
qui recherche la ligne étiquetée numéro 6.
Voici une commande head native rapide qui vous donne les 9 premières lignes sous DOS.
findstr /n "." myfile.txt | findstr "^.:"
Les 2 premiers caractères de chaque ligne seront le numéro de la ligne.
FWIW, pour ceux qui ont juste besoin de couper un nombre indéterminé d’enregistrements dans la tête du fichier,more>fonctionne bien. Cela est utile pour avoir un fichier plus petit dans les premières étapes de développement.
En tant que réponse moderne, si vous utilisez Windows 10, vous pouvez utiliser le "sous-système Linux pour Windows".
https://docs.Microsoft.com/en-us/windows/wsl/install-win10
Cela vous permettra d’exécuter des commandes Linux natives à partir de Windows et d’exécuter exactement comment vous le feriez sous Linux.
dans PS, essayez d'utiliser la commande suivante:
Select -Last 1
Cette commande peut aussi être pipelinée.
Exemple pour obtenir la première ligne:
type .\out.txt | Select -Last 1
ou pour obtenir la première ligne:
type .\out.txt | Select -First 1
set /p line= < file.csv
echo %line%
il retournera la première ligne de votre fichier dans cmd Windows dans la variable% line%.