Sie scheinen zu sagen: "Ich möchte das zweite Feld aus der Zeile unmittelbar nach der Zeile, die das Wort enthält ENERGY
(in dem ENERGY
sich das zweite Feld befindet)." Wenn Sie das möchten, können Sie es mit machen
awk '/ENERGY/ { found_it=1; next; } found_it { print $2; found_it=0; }'
(Geben Sie Ihren Dateinamen am Ende dieses Befehls ein - direkt nach dem }'
- oder leiten Sie Ihre Daten in den obigen Befehl.)
Dies einfach
- Sucht nach einer Zeile, die die Zeichenfolge enthält
ENERGY
.- setzt ein Flag (
found_it
), wenn dies der Fall ist, - und überspringt diese Zeile.
- setzt ein Flag (
- Wenn es auf eine Zeile trifft und das
found_it
Flag gesetzt ist, bedeutet dies, dass die vorherige Zeile enthalten istENERGY
, also- das zweite Wort aus dieser Zeile ausgeben und
- Lösche (Null) das
found_it
Flag, damit wir keine Ausgabe von nachfolgenden Zeilen erzeugen.
Wenn Ihre Datei die ENERGY
Zeilen 4, 14 und 24 enthält, wird der zweite Befehl aus den Zeilen 5, 15 und 25 mit dem obigen Befehl gedruckt. Wenn Sie dies nicht wünschen, ist dies ein einfacherer Ansatz
awk '/ENERGY/ { found_it=1; next; } found_it { print $2; exit; }'
Dies ist dasselbe wie das erste, außer dass das zweite Feld aus Zeile 5 gedruckt wird und es nicht mehr aussieht. Auch wenn es ENERGY
nur einmal in der Datei vorkommt, ist dieser Ansatz vorzuziehen, da nicht die gesamte Datei gelesen werden muss, sondern nur bis zu dem gewünschten Wert.
Diese Befehle werden:
- finden Sie die Zeichenfolge,
ENERGY
auch wenn es Teil eines größeren Wortes, wie istCENERGY
,ENERGY-CONSUMING
,ENERGYLEVEL
oderHIGH-ENERGY
. - find den String,
ENERGY
auch wenn er nicht das zweite Feld in seiner Zeile ist. - Druckt den Wert des zweiten Feldes, nicht das Feld, in dem er gefunden wurde
ENERGY
. - nicht finden
Energy
oderenergy
. - scheitern, wenn
ENERGY
in der letzten Zeile ist.
Wenn dies Probleme sind, bearbeiten Sie Ihre Frage, um Ihre Anforderungen anzugeben.