GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Übereinstimmende Zeile und N-te Zeile von der Übereinstimmenden Zeile drucken?

Ich versuche, die übereinstimmende Zeile und die vierte Zeile der übereinstimmenden Zeile (Zeile mit dem gesuchten Ausdruck) zu drucken.

Ich habe den folgenden Code verwendet:
sed -n 's/^[ t]*//; /img class="devil_icon/,4p' input.txt

Aber das gibt nur die übereinstimmende Zeile aus.

Dies gibt nur die vierte Zeile aus.
awk 'c&&!--c;/img class="devil_icon/{c=4}' input.txt

Ich muss sowohl die übereinstimmende Zeile als auch nur die vierte Zeile drucken.

Akzeptierte Antwort:

In awk würdest du es wie folgt machen

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

oder

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

Erklärung

Die erste Lösung findet alle Zeilen, die mit pattern übereinstimmen . Wenn es eine Übereinstimmung findet, speichert es die Datensatznummer (NR ) im Array nr . Es speichert auch den 4. Datensatz von NR im selben Array. Dies geschieht durch den nr[NR+4] . Jeder Datensatz (NR ) wird dann überprüft, ob es in nr vorhanden ist Array, wenn ja, wird der Datensatz gedruckt.

Die zweite Lösung funktioniert im Wesentlichen genauso, außer wenn sie auf das pattern stößt es druckt diese Zeile und speichert dann den 4. Datensatz davor im Array nr , geht dann zum nächsten Datensatz. Dann wenn awk trifft auf diesen 4. Datensatz auf NR in nr Block wird ausgeführt und gibt danach diesen +4-Eintrag aus.

Beispiel

Hier ist eine Beispieldatendatei, sample.txt .

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

Verwenden der 1. Lösung:

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

Verwenden der 2. Lösung:

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

Linux
  1. Manipulieren von X-Tasten- und Zeigergriffen in der Befehlszeile?

  2. Wie starte ich Icewm von der Befehlszeile aus neu?

  3. Nur die erste Zeile aus jeder Folge aufeinanderfolgender Zeilen beibehalten, die einem Muster entsprechen?

  4. Trap, Err und Echo der Fehlerlinie?

  5. Den übereinstimmenden Text an die Zeile anhängen?

Senden und empfangen Sie Google Mail über die Linux-Befehlszeile

Programmieren Sie Hardware über die Linux-Befehlszeile

Ohcount – Der Quellcode-Zeilenzähler und -Analysator

Wie man Debian 10 über die Befehlszeile und die GUI herunterfährt

Wie aktiviere und deaktiviere ich Gnome-Erweiterungen über die Befehlszeile?

MySQL die Befehlszeile und Pager