sed -n '10000000,10000020p' filename
Vous pourriez accélérer un peu le processus comme ceci :
sed -n '10000000,10000020p; 10000021q' filename
Dans ces commandes, l'option -n
causes sed
pour "supprimer l'impression automatique de l'espace des motifs". Le site p
"imprime l'espace du motif actuel" et la commande q
commande "Quitte immédiatement le script sed script sans traiter aucune autre entrée..." Les guillemets sont issus de la sed
man
page .
Au fait, votre commande
tail -n 10000000 filename | head 10
commence à la dix millionième ligne de la fin du fichier, alors que votre commande "du milieu" semble commencer à la dix millionième à partir de la première ligne du fichier. débutant ce qui serait équivalent à :
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 devra parcourir le fichier en comptant les nouvelles lignes. Il n'y a aucun moyen de raccourcir cela.
Si, toutefois, le fichier est trié (un fichier journal avec des horodatages, par exemple) ou a des lignes de longueur fixe, alors vous pouvez rechercher dans le fichier sur la base d'une position d'octet. Dans l'exemple du fichier journal, vous pourriez effectuer une recherche binaire pour une plage de temps comme mon script Python aquí * fait. Dans le cas du fichier à longueur d'enregistrement fixe, c'est très simple. Il suffit de chercher linelength * linecount
dans le fichier.
* Je continue à vouloir poster une autre mise à jour de ce script. Peut-être que je vais y arriver un de ces jours.