web-dev-qa-db-fra.com

Comment afficher toutes les lignes de la nième ligne d'un fichier sous Unix

Je veux afficher toutes les lignes à partir de la nième ligne. Dites, imprimez la troisième ligne d'un fichier et toutes les lignes suivantes jusqu'à la fin du fichier. Y a-t-il une commande pour cela?

29
user3905438

vous pouvez utiliser la queue

extrait de la page de manuel:

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

par exemple

tail -n +10 file 

affiche le contenu des fichiers en commençant par la 10e ligne

54
Nikolaus Gradwohl
sed -n '3,$p' file

Ce n'est qu'un texte de remplissage car stackoverflow n'apprécie pas les courtes lignes de commande.

10
Alain Collins

Pour montrer depuis la 5ème ligne:

awk 'NR>4' file
10
Juan Diego Godoy

Imprimez, mais supprimez les lignes 1 à 2:

sed '1,2d' filename
5
Beta

Vous pouvez utiliser awk comme ceci:

awk 'BEGIN{n=5}NR<=n{next}1' file
  • BEGIN{n=5} - avant le début du traitement des fichiers, définit n sur le nombre de lignes à ignorer (5).
  • NR<=n{next} - ignore le traitement si le numéro de ligne est inférieur ou égal à n.
  • 1 - raccourci pour print tout le reste.
5
John B

La commande awk peut le faire en imprimant uniquement des lignes dont le numéro d'enregistrement NR est de trois ou plus:

awk 'NR>=3' input_file_name

Vous pouvez également passer la valeur dans awk en utilisant une variable si besoin est:

awk -v n=3 'NR>=n' input_file_name

(et vous pouvez utiliser -v n=${num} pour utiliser également une variable d'environnement).

Il existe de nombreux autres outils que vous pouvez utiliser pour faire le même travail, tail, sed et Perl parmi eux ou, comme il s'agit d'un site de programmation de questions/réponses, lancez simplement le vôtre :

#include <stdio.h>

int main (void) {
    // Need character and # of newlines to skip.

    int ch, newlines = 2;

    // Loop until EOF or first lines skipped, exit on EOF.

    while ((ch = getchar()) != EOF)
        if ((ch == '\n') && (--newlines == 0))
            break;

    if (ch == EOF)
        return 0;

    // Now just echo all other characters, then return.

    while ((ch = getchar()) != EOF)
        putchar (ch);

    return 0;
}

Maintenant, vous n'écririez pas normalement votre propre programme de filtrage pour cela, mais, puisque vous avez demandé la commande la plus courte, vous pouvez utiliser ce code source pour créer un exécutable appelé x pour le faire:

x <input_file_name

Vous auriez du mal à trouver une commande plus courte que cela. Bien sûr, en supposant que vous êtes dans un environnement UNIXy (en particulier, bash), vous pouvez également:

alias x awk 'NR>=3'

:-)

2
paxdiablo