113 votes

Comment afficher certaines lignes d'un fichier texte sous Linux ?

Je suppose que tout le monde connaît les utilitaires utiles de la ligne de commande de Linux. head y tail . head permet d'imprimer les X premières lignes d'un fichier, tail fait la même chose mais imprime la fin du fichier. Quelle est une bonne commande pour imprimer le milieu d'un fichier ? quelque chose comme middle --start 10000000 --count 20 (imprimer les 10'000'000ème à 10'000'010ème lignes).

Je cherche quelque chose qui puisse traiter efficacement les gros fichiers. J'ai essayé tail -n 10000000 | head 10 et c'est horriblement lent.

1voto

Charles Stewart Points 650

La réponse de Dennis est la bonne. Mais en utilisant seulement head & tail, sous bash :

middle () { head -n $\[ $1 + $2 \] | tail -n $2; }

Cela scanne les premières lignes $1+$2 deux fois, ce qui est bien pire que la réponse de Dennis. Mais vous n'avez pas besoin de vous souvenir de toutes ces lettres sed pour l'utiliser.....

1voto

Mark Bao Points 307

Une version rubis oneliner.

ruby -pe 'next unless $. > 10000000 && $. < 10000020' < filename.txt

Ça peut être utile à quelqu'un. Les solutions avec 'sed' fournies par Dennis et Dox sont très bien, même si elles semblent plus rapides.

0voto

Hrvoje Špoljar Points 5116

Par exemple, cet awk va imprimer les lignes entre 20 et 40

awk '{si ((NR > 20) && (NR < 40)) print $0}' /etc/passwd

0voto

Dagelf Points 458

Si vous connaissez les numéros de ligne, disons que vous voulez obtenir les lignes 1, 3 et 5 d'un fichier, disons /etc/passwd :

perl -e 'while(<>){if(++$l~~[1,3,5]){print}}' < /etc/passwd

-1voto

Ajay Points 11

Vous pouvez utiliser "nl".

nl filename | grep <line_num>

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X