it-swarm.com.de

Windows-Äquivalent des Befehls 'tail'

Gibt es eine Möglichkeit, den Befehl * nix tail in der Windows-Befehlszeile zu simulieren? Ich habe eine Datei und möchte die ersten n Textzeilen abschneiden. Zum Beispiel:

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

Kein genaues Äquivalent. Es gibt jedoch einen systemeigenen DOS-Befehl "more" mit einer + n-Option, mit der die Datei nach der n-ten Zeile ausgegeben wird:

DOS-Eingabeaufforderung:

C:\>more +2 myfile.txt

Der obige Befehl gibt alles nach den ersten 2 Zeilen aus.
Dies ist eigentlich die Umkehrung von Unix head :

Unix-Konsole:

[email protected]:~$ head -2 myfile.txt

Der obige Befehl druckt nur die ersten 2 Zeilen der Datei.

78
Matthew Nizol

WENN Sie Windows PowerShell installiert haben (ich denke, dass es seit XP enthalten ist), können Sie es einfach mit cmd.exe ausführen:

Oberbefehl:

powershell -command "& {Get-Content *filename* -TotalCount *n*}"

Schwanzbefehl:

powershell -command "& {Get-Content *filename* | Select-Object -last *n*}"

oder direkt von PowerShell:

Get-Content *filename* -TotalCount *n*
Get-Content *filename* | Select-Object -last *n*


update

PowerShell 3.0 (Windows 8 und höher) fügte den Befehl Tail mit dem Alias ​​Last.Head und First Aliase zu TotalCount hinzu.

Befehle können also als neu geschrieben werden

Get-Content *filename* -Head *n*
Get-Content *filename* -Tail *n*
96
Amit Portnoy
more /e filename.txt P n

dabei ist n die Anzahl der anzuzeigenden Zeilen. Funktioniert schnell und ist genau wie der Befehl head.

22
Dan

Sie könnten CoreUtils von GnuWin32 erhalten, eine Sammlung von Standard-Unix-Tools, die auf Windows portiert werden.

Es enthält unter anderem Kopf.

Dies ist ein totaler Hack, aber wenn es sich um eine riesige Datei handelt, die Sie einfach nur das Format, den Header usw. untersuchen möchten, und Sie nach einer Lösung suchen, können Sie immer die "More" -Ausgabe in eine neue Datei und STRG-C umleiten schnell. Die Ausgabezeilen können nicht genau gesteuert werden, und Sie werden sie höchstwahrscheinlich in der Mitte einer Ausgabezeile töten, aber es ist eine preiswerte Möglichkeit, ein kleines Stück einer sonst unbrauchbaren Datei zu greifen.

Ex.

 C:\more test.csv> test.txt 
^ C C:\more test.txt 
linie 1
zeile 2
etc ...... C:\
12
user2041301

Wenn Sie mehr + n verwenden, das Matt bereits erwähnt hat, versuchen Sie Folgendes, um Pausen in langen Dateien zu vermeiden:

mehr +1 myfile.txt> con

Wenn Sie die Ausgabe von mehr umleiten, wird sie nicht angehalten - und hier werden Sie zur Konsole umgeleitet. Sie können in ähnlicher Weise zu einer anderen Datei wie dieser weiterleiten, ohne die Pausen von mehr einzuhalten, wenn dies das gewünschte Endergebnis ist. Verwenden Sie>, um zur Datei umzuleiten und diese zu überschreiben, falls sie bereits existiert, oder >>, um sie an eine vorhandene Datei anzuhängen. (Kann entweder verwenden, um zu con umzuleiten.)

7
Anon

Nun, dies wird do it, aber es ist ungefähr so ​​schnell wie es aussieht (ungefähr O (n * m), wobei n die Anzahl der anzuzeigenden Zeilen und m die Gesamtanzahl der Zeilen in der Datei ist)

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

Dabei ist "10" die Anzahl der Zeilen, die Sie drucken möchten, und "Dateiname" der Dateiname.

7
brianary

Get-content -Tail n file.txt mit Powershell ist das einzige, was in Linux tail nahe kommt. 

Der oben vorgeschlagene Get-Content *filename* | Select-Object -last *n* lädt/parst das Ganze. Unnötig zu sagen, dass es mit meiner 10-GB-Protokolldatei nicht zufrieden war ... Die Option -Tail beginnt am Ende der Datei.

5
Sebas

sie können auch Git bash verwenden, wobei auch Kopf und Schwanz emuliert werden

5
brigasnuncamais

Power Shell:

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

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

Ein Resource Kit kann hier heruntergeladen werden: http://www.Microsoft.com/downloads/de/confirmation.aspx?familyId=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displayLang=de

Es enthält ein tail.exe-Tool, ist jedoch nur mit einigen Windows-Versionen kompatibel

(Aus diesem Beitrag kopiert: Tail-Befehl für Windows )

2
rasputino

Wenn Sie den Befehl head verwenden möchten, können Sie Cygwin einfach installieren. Dann stehen Ihnen alle UNIX-Tools zur Verfügung.

Wenn dies keine gute Lösung ist, können Sie versuchen, findstr zu verwenden und eine Suche nach dem Zeilenende-Indikator durchzuführen.

findstr auf MSDN: http://technet.Microsoft.com/en-us/library/bb490907.aspx

2
Zian Choy

Auf dieser Seite steht ein kostenloses Dienstprogramm head, das Sie verwenden können. Ich habe es noch nicht probiert.

1
JeffH

Ich habe nicht versucht, einen Bereich zu extrahieren, aber ich konnte mit dem folgenden DOS-Befehl eine Zeile abrufen: 

find /N " " *.log|find "[6]" 

Da die meisten Dateien Leerzeichen enthalten, zieht dieser Befehl jede Zeile aus allen LOG-Dateien und nummeriert sie grundsätzlich mit 1 für jede Datei. Die nummerierten Ergebnisse werden dann in den zweiten FIND-Befehl geleitet, der nach der mit Nummer 6 gekennzeichneten Zeile sucht.

1
sergioPinheiro

Hier ist ein schneller nativer Kopfbefehl, der die ersten 9 Zeilen in DOS enthält.

findstr /n "." myfile.txt | findstr "^.:"

Die ersten 2 Zeichen in jeder Zeile sind die Zeilennummer. 

1
Don4x

FWIW, für diejenigen, die nur eine unbestimmte Anzahl von Datensätzen vom Kopf der Datei abschneiden müssen, funktioniert more> gut. Dies ist nur nützlich, wenn Sie zu Beginn der Entwicklung etwas kleinere Dateien verwenden möchten.

1
user382459

Als zeitgemäße Antwort können Sie unter Windows 10 das "Linux-Subsystem für Windows" verwenden.

https://docs.Microsoft.com/en-us/windows/wsl/install-win10

Auf diese Weise können Sie native Linux-Befehle innerhalb von Fenstern ausführen und so genau wie unter Linux ausführen.

0
Alex KeySmith

in PS versuchen, Befehl zu verwenden:

Select -Last 1

Dieser Befehl kann auch per Pipeline weitergeleitet werden.

Beispiel für die erste Zeile:

type .\out.txt | Select -Last 1

oder um die erste Zeile zu bekommen:

 type .\out.txt | Select -First 1
0
Gico
set /p line= < file.csv 
echo %line%

es wird die erste Zeile Ihrer Datei in cmd Windows in der Variable% line% zurückgegeben.

0
Sergey Orlov