Wie laufe ich awk für eine bestimmte Anzahl von Zeilen?

Ich möchte einige Zeilen mit awk extrahieren. Ist es möglich, die folgende Aufgabe auszuführen:

ls -l | awk "BEGIN FOR(i=122;i<=129;i++) FNR==i" 

Wie kann ich die Details aus den Zeilennummern 122 bis 129 anzeigen?

Kommentare

  • Wenn Sie dies in einer Schleife tun würden, würde ich ' die sed -Methode, da sed so viel kleiner ist (und schneller geladen wird) als awk.

Antwort

Sie haben nicht verstanden, wie awk funktioniert. Das angegebene „Programm“ wird immer einmal für jede Zeile (oder „Aufzeichnung“ im awk-Sprachgebrauch) der Eingabe ausgeführt, es ist keine FOR oder erforderlich Verwenden Sie einfach:

ausführliche Methode

ls -l | awk "NR>=122 && NR<=129 { print }" 

kompaktere Methode

ls -l | awk "NR==122,NR==129" 

Diese geben einen Bereich für NR an, bei dem es sich normalerweise um den „Number Record“ handelt ist die aktuelle Zeile, die awk verarbeitet.

Kommentare

  • Eigentlich die typische awk Code für eine solche Aufgabe ist normalerweise ls -l | awk 'NR==122,NR==129'.
  • Wie lautet der Befehl zum Abrufen der letzten 100 Zeilen aus der Datei mit awk
  • @ShihabudheenKM Vielleicht sehen Sie sich das an: stackoverflow.com/questions/12546919/…

Antwort

Eine weitere alternative Methode wäre die Verwendung von sed :

Wenn es jedoch, wie Ihre Frage andeutet, wichtig ist, awk dafür zu verwenden, lesen Sie den Kommentar von manatwork zu Zrajms Antwort. In der Dokumentation von awk heißt es:

 A pattern may consist of two patterns separated by a comma; in this case, the action is performed for all lines from an occurrence of the first pattern though an occurrence of the second. 

Wenn Sie möchten, können Sie auch erweiterte Bedingungen festlegen. Beispiel:

ls -l | awk "NR==122,/foobar/" 

Dies würde die Ausgabe in Zeile 122 starten und fortgesetzt, bis eine Zeile die enthält Wort „foobar“.

Wenn Sie uns den tatsächlichen Anwendungsfall mitteilen, können wir möglicherweise mit Antworten helfen, die eine bessere Lösung bieten. Ich mache mir Sorgen, dass dies so klingt ein XY-Problem .

Antwort

Eine andere Möglichkeit Tun Sie dies (obwohl ich die awk -Methode bevorzuge) mit coreutils:

ls -l | tail -n +122 | head -n 8 

Antwort

 awk "NR == 122,NR == 129{print $0}" file 

Hier können wir die Zeilen von 122 bis 129 der Datei extrahieren.

werden die gesamten Dateidaten zwischen 122 und 129 Zeilen gedruckt.

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.