Unix - Kopf und Ende der Datei
Sagen, Sie haben eine txt-Datei, was ist der Befehl zum anzeigen der top-10-Linien und unten 10 Zeilen der Datei gleichzeitig?
d.h. wenn die Datei 200 Zeilen lang ist, dann Ansicht-Zeilen 1-10 und machen 190-200.
InformationsquelleAutor der Frage toop | 2011-12-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie einfach:
Hinweis: wird gedruckt, vervielfältigt Zeilen, wenn die Anzahl der Zeilen in file.txt ist kleiner als die Standard-Zeilen von Kopf + Standard-Linien der Rute.
InformationsquelleAutor der Antwort Aleksandra Zalcman
ed
ist diestandard text editor
InformationsquelleAutor der Antwort kev
Für einen reinen stream (z.B. die Ausgabe von einem Befehl), die Sie verwenden können, 'tee' , Gabel stream und senden einen stream an Kopf und Schwanz. Dies erfordert entweder den '>( Liste ) " - Funktion der bash (+ /dev/fd/N):
oder die Verwendung von /dev/fd/N (oder /dev/stderr) plus Unterschalen mit komplizierten Umleitung:
(Weder diese Arbeit in csh oder tcsh.)
Etwas mit ein wenig besser zu kontrollieren, können Sie diesen perl-Befehl:
InformationsquelleAutor der Antwort RantingNerd
head -10 file.txt; tail -10 file.txt
Andere als die, die Sie schreiben müssen, Ihr eigenes Programm /Skript.
InformationsquelleAutor der Antwort mah
hier das problem, dass der stream-orientierten Programme nicht wissen, die Länge der Datei im Voraus (weil könnte es nicht sein, wenn es ein real-stream).
tools wie
tail
Puffer für die letzten n Zeilen und warten Sie, bis das Ende des Streams, dann drucken.wenn Sie dies tun möchten, in einem einzigen Befehl (und funktioniert mit jedem offset, und wiederholen Sie keine Zeilen aus, wenn Sie sich überlappen) müssen Sie ahmen dieses Verhalten nach, die ich erwähnt.
versuchen, diese awk:
InformationsquelleAutor der Antwort Samus_
Gut, Sie können immer Kette Sie zusammen. Wie so,
head fiename_foo && tail filename_foo
. Falls das nicht ausreicht, könnten Sie schreiben sich selbst eine bash-Funktion in Ihr .Profil-Datei oder eine login-Datei, die Sie verwenden:Und später aufrufen, von Ihrem shell-prompt ein:
head_and_tail filename_foo
.InformationsquelleAutor der Antwort S.R.I
Ersten 10 Zeilen der Datei.extern, dann seine letzten 10 Zeilen:
cat file.ext | head -10 && cat file.ext | tail -10
Letzten 10 Zeilen der Datei, dann die ersten 10:
cat file.ext | tail -10 && cat file.ext | head -10
Können Sie dann leiten Sie die Ausgabe auch anderswo:
(cat file.ext | head -10 && cat file.ext | tail -10 ) | your_program
InformationsquelleAutor der Antwort Paul
Schrieb ich ein einfaches python-app, dies zu tun: https://gist.github.com/garyvdm/9970522
Verarbeitet Rohre (streams) als auch Dateien.
InformationsquelleAutor der Antwort Gary van der Merwe
Warum nicht verwenden
sed
für diese Aufgabe?sed -n -e 1,+9p -e 190,+9p textfile.txt
InformationsquelleAutor der Antwort lik
Zeichnung auf Ideen oben (getestet mit bash & zsh)
aber über einen alias 'Hut' Kopf und Schwanz
InformationsquelleAutor der Antwort zzapper
Basierend auf J. F. Sebastians Kommentar:
Diese Weise können Sie die erste Zeile und der rest anders in einer pipe, die nützlich für die Arbeit mit CSV-Daten:
InformationsquelleAutor der Antwort modular
Behandeln Rohre (streams) als auch Dateien, fügen Sie diese zu Ihrem .bashrc oder .Profil-Datei:
Dann können Sie nicht nur
aber auch
(Dies fügt noch störende Leerzeilen als 10 übersteigt die Länge der Eingabe, im Gegensatz zu plain old
a.out | (head; tail)
. Danke, die bisherigen Beantworter.)Hinweis:
headtail 10
nichtheadtail -10
.InformationsquelleAutor der Antwort Camille Goudeseune
Dauerte es eine Menge Zeit zu Ende-up mit dieser Lösung, die scheint die einzige zu sein, das alle use-cases (bisher):
Feature-Liste:
InformationsquelleAutor der Antwort sorin
Nur eine weitere variation auf die
(head;tail)
Thema, aber die Vermeidung der ursprüngliche Puffer füllen Ausgabe für kleine Dateien.InformationsquelleAutor der Antwort guest
Bin ich auf der Suche für diese Lösung für eine Weile. Versucht es selbst mit sed, aber das problem mit nicht zu wissen, die Länge von Datei - /stream-vorher war unüberwindbar. Von all den verfügbaren Optionen oben, ich mag Camille Goudeseune die awk-Lösung. Er wollte eine Bemerkung machen, dass seine Lösung zusätzliche Leerzeilen in die Ausgabe mit einer ausreichend kleinen Gruppe von Daten. Hier biete ich eine änderung seiner Lösung entfernt werden, werden die zusätzlichen Zeilen.
InformationsquelleAutor der Antwort Michael Blahay
Aufbauend auf das, was @Samus_ erklärt hier darüber, wie @Aleksandra Zalcman - Befehl funktioniert, diese Variante ist praktisch, wenn Sie nicht schnell Stelle, wo der Schwanz beginnt, ohne zu zählen Linien.
Oder wenn Sie beginnen, mit etwas anderem als 20 Zeilen, die Anzahl der Zeilen könnte sogar helfen.
InformationsquelleAutor der Antwort Script Wolf
Zum drucken der ersten 10 und letzten 10 Zeilen einer Datei, die Sie könnten versuchen, diese:
cat <(head -n10 file.txt) <(tail -n10 file.txt) | less
InformationsquelleAutor der Antwort mariana.ft
Können Sie auch:
InformationsquelleAutor der Antwort mark_infinite