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, dased
so viel kleiner ist (und schneller geladen wird) alsawk
.
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 normalerweisels -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
- doppelte Antwort von unix.stackexchange.com/a/89641/72456