sed -n '10000000,10000020p' filename
Möglicherweise können Sie dies ein wenig beschleunigen:
sed -n '10000000,10000020p; 10000021q' filename
In diesen Befehlen -n
bewirkt die Option, dass sed
das automatische Drucken des Musterbereichs unterdrückt wird. Der p
Befehl "print [s] the current pattern space" und der q
Befehl "Sofort das sed-Skript verlassen, ohne weitere Eingaben zu verarbeiten ..." Die Anführungszeichen stammen von der sed
man
Seite .
Übrigens Ihr Befehl
tail -n 10000000 filename | head 10
beginnt in der zehnmillionsten Zeile ab dem Ende der Datei, während Ihr "mittlerer" Befehl anscheinend am zehnmillionsten vom Anfang beginnt, was äquivalent wäre zu:
head -n 10000010 filename | tail 10
Das Problem ist, dass bei unsortierten Dateien mit Zeilen variabler Länge jeder Prozess die Zeilenumbrüche durchlaufen muss. Es gibt keine Möglichkeit, das zu verkürzen.
Wenn die Datei jedoch sortiert ist (z. B. eine Protokolldatei mit Zeitstempeln) oder Zeilen mit fester Länge enthält, können Sie die Datei anhand einer Byte-Position durchsuchen. Im Beispiel für eine Protokolldatei können Sie eine Binärsuche für einen bestimmten Zeitraum durchführen, wie dies in meinem Python-Skript hier * der Fall ist. Bei der Datei mit fester Datensatzlänge ist das ganz einfach. Sie suchen nur nach linelength * linecount
Zeichen in der Datei.
* Ich habe weiterhin die Absicht, ein weiteres Update für dieses Skript zu veröffentlichen. Vielleicht komme ich eines Tages dazu.