sed -n '10000000,10000020p' filename
Vous pourriez peut-être accélérer cela un peu comme ceci:
sed -n '10000000,10000020p; 10000021q' filename
Dans ces commandes, l'option -n
amène sed
à « supprimer l' impression automatique de l' espace de motif ». La p
commande "imprime le motif actuel" et la q
commande "Quitte immédiatement le script sed sans traitement supplémentaire ..." Les guillemets proviennent de la sed
man
page .
Au fait, votre commande
tail -n 10000000 filename | head 10
commence à la dix millionième ligne à partir de la fin du fichier, tandis que votre commande "moyenne" semble commencer au dix millionième à partir du début, ce qui équivaut à:
head -n 10000010 filename | tail 10
Le problème est que pour les fichiers non triés avec des lignes de longueur variable, tout processus doit passer par le décompte des fichiers. Il n'y a aucun moyen de raccourcir cela.
Toutefois, si le fichier est trié (un fichier journal avec des horodatages, par exemple) ou s'il comporte des lignes de longueur fixe, vous pouvez rechercher dans le fichier en fonction d'une position d'octet. Dans l'exemple de fichier journal, vous pouvez effectuer une recherche binaire plusieurs fois, comme le fait mon script Python ici *. Dans le cas du fichier à longueur d'enregistrement fixe, c'est très simple. Vous recherchez simplement des linelength * linecount
caractères dans le fichier.
* Je continue à vouloir publier une autre mise à jour de ce script. Peut-être que je vais en parler un de ces jours.