web-dev-qa-db-fra.com

Quel est le contraire de la tête? Je veux tout sauf les premières N lignes d'un fichier

Étant donné un fichier texte de longueur inconnue, comment puis-je lire, par exemple, tous sauf les 2 premières lignes du fichier? Je sais que tail me donnera les N dernières lignes, mais je ne sais pas ce que N est en avance.

Donc pour un fichier

AAAA
BBBB
CCCC
DDDD
EEEE

Je voudrais

CCCC
DDDD
EEEE

Et pour un fichier

AAAA
BBBB
CCCC

J'aurais juste

CCCC
125

tail --help donne ce qui suit:

  -n, --lines=K            output the last K lines, instead of the last 10;
                           or use -n +K to output lines starting with the Kth

Donc, pour filtrer le premier 2 lignes, -n +3 devrait vous donner le résultat que vous recherchez (à partir du 3ème).

184
Joe Enos

En supposant que votre version de tail le prenne en charge, vous pouvez spécifier le début de la queue après X lignes. Dans votre cas, vous feriez 2 + 1.

tail -n +3

[mdemaria@oblivion ~]$ tail -n +3 stack_overflow.txt
CCCC
DDDD
EEEE
18
Mike DeMaria

Une solution simple utilisant awk:

awk 'NR > 2 { print }' file.name
12
janm

Essayez sed 1,2d. Remplacez 2 si nécessaire.

7
lhf

tail -n +linecount filename commence la sortie à la ligne linecount de filename, donc tail -n +3 filename devrait faire ce que vous voulez.

5
Jim Lewis

Utilisez ceci en supposant que le premier échantillon s'appelle sample1.dat puis tail --lines=3 sample1.dat qui imprimera toutes les lignes de la 3ème à la dernière ligne.

Pour le deuxième échantillon, supposons à nouveau qu’il s’appelle échantillon2.dat, il s’agirait de tail --lines=-1 sample2.dat qui afficherait la dernière ligne ...

0
t0mm13b

Je ne sais vraiment pas comment le faire de la queue ou de la tête, mais avec l'aide de wc -l (Nombre de lignes) et de l'expression bash, vous pouvez y parvenir.

tail -$(( $( wc -l $FILE | grep -Eo '[0-9]+' ) - 2 )) $FILE

J'espère que cela t'aides.

0
NawaMan