GNU/Linux >> Tutoriels Linux >  >> Linux

Imprimer la ligne correspondante et la nième ligne à partir de la ligne correspondante ?

J'essaie d'imprimer la ligne correspondante et la 4ème ligne à partir de la ligne correspondante (ligne contenant l'expression que je recherche).

J'utilise le code suivant :
sed -n 's/^[ t]*//; /img class="devil_icon/,4p' input.txt

Mais cela n'imprime que la ligne correspondante.

Cela n'imprime que la 4ème ligne.
awk 'c&&!--c;/img class="devil_icon/{c=4}' input.txt

Je dois imprimer à la fois la ligne correspondante et la 4ème ligne uniquement.

Réponse acceptée :

Dans awk, vous le feriez comme suit

awk '/pattern/{nr[NR]; nr[NR+4]}; NR in nr' file > new_file`

ou

awk '/pattern/{print; nr[NR+4]; next}; NR in nr' file > new_file`

Explication

La première solution trouve toutes les lignes qui correspondent à pattern . Lorsqu'il trouve une correspondance, il stocke le numéro d'enregistrement (NR ) dans le tableau nr . Il stocke également le 4ème enregistrement de NR dans le même tableau. Ceci est fait par le nr[NR+4] . Chaque enregistrement (NR ) est ensuite vérifié pour voir s'il est présent dans le nr tableau, si c'est le cas, l'enregistrement est imprimé.

La deuxième solution fonctionne essentiellement de la même manière, sauf lorsqu'elle rencontre le pattern il imprime cette ligne, puis stocke le 4ème enregistrement devant lui dans le tableau nr , puis passe à l'enregistrement suivant. Puis quand awk rencontre ce 4ème enregistrement le NR in nr bloc sera exécuté et imprimera ensuite cet enregistrement +4.

Exemple

Voici un exemple de fichier de données, sample.txt .

$ cat sample.txt 
1
2
3
4 blah
5
6
7
8
9
10 blah
11
12
13
14
15
16

En utilisant la 1ère solution :

$ awk '/blah/{nr[NR]; nr[NR+4]}; NR in nr' sample.txt 
4 blah
8
10 blah
14

En utilisant la 2ème solution :

$ awk '/blah/{print; nr[NR+4]; next}; NR in nr' sample.txt 
4 blah
8
10 blah
14

Linux
  1. Configurer un espace de travail Linux à distance depuis la ligne de commande

  2. Rapports d'E/S à partir de la ligne de commande Linux

  3. Manipuler les saisies de la touche X et du pointeur sur la ligne de commande ?

  4. Ajouter le texte correspondant à la ligne ?

  5. Imprimer la dernière ligne d'un fichier, à partir de la CLI

Envoyer et recevoir Gmail à partir de la ligne de commande Linux

Programmer le matériel à partir de la ligne de commande Linux

Ohcount - Le compteur et l'analyseur de lignes de code source

Comment arrêter Debian 10 à partir de la ligne de commande et de l'interface graphique

Comment activer et désactiver les extensions Gnome à partir de la ligne de commande ?

MySQL la ligne de commande et les pagers