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
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.
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*
more /e filename.txt P n
dabei ist n die Anzahl der anzuzeigenden Zeilen. Funktioniert schnell und ist genau wie der Befehl head
.
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:\
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.)
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.
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.
sie können auch Git bash verwenden, wobei auch Kopf und Schwanz emuliert werden
Power Shell:
Get-Content C:\logs\result.txt -Tail 10
Get-Content C:\logs\result.txt -wait (monitor the tail)
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 )
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
Auf dieser Seite steht ein kostenloses Dienstprogramm head
, das Sie verwenden können. Ich habe es noch nicht probiert.
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.
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.
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.
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.
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
set /p line= < file.csv
echo %line%
es wird die erste Zeile Ihrer Datei in cmd Windows in der Variable% line% zurückgegeben.