web-dev-qa-db-fra.com

Equivalent Windows de la commande 'tail'

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
94
Chris Smith

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.

78
Matthew Nizol

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*
96
Amit Portnoy
more /e filename.txt P n

où n = le nombre de lignes à afficher. Fonctionne rapidement et correspond exactement à la commande head.

22
Dan

Vous pouvez obtenir CoreUtils à partir de GnuWin32 , qui est un ensemble d’outils Unix standard, portés sous Windows.

Il contient, entre autres, la tête.

17

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:\
12
user2041301

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.)

7
Anon

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.

7
brianary

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.

5
Sebas

vous pouvez aussi utiliser Git bash où la tête et la queue sont également imitées

5
brigasnuncamais

Powershell:

Get-Content C:\logs\result.txt -Tail 10

Get-Content C:\logs\result.txt -wait (monitor the tail)
4
Manuel Alves

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 )

2
rasputino

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

2
Zian Choy

Il existe un utilitaire gratuit head sur cette page que vous pouvez utiliser. Je n'ai pas encore essayé.

1
JeffH

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.

1
sergioPinheiro

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. 

1
Don4x

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.

1
user382459

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.

0
Alex KeySmith

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
0
Gico
set /p line= < file.csv 
echo %line%

il retournera la première ligne de votre fichier dans cmd Windows dans la variable% line%.

0
Sergey Orlov