awk, komisches verhalten

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

awk, komisches verhalten

Beitrag von ren22 » 27.11.2017 21:22:36

ich habe eine script was aufgeführt wird und darin ist auch enthalten:

#alles ausgeben zwischen den patterns
awk '/BlacklistSTART/{flag=1;next}/BlacklistEND/{flag=0}flag' /usr/local/etc/rc.d/meinscript

so das sich das script (datei) selber auslesen kann.(Soll Zustand)

wenn ich einen anderen dateinamen angebe, beide dateien sind identisch, funktioniert es, bei selbigen dateinamen also wenn ich $0 angebe, wird die gasamte Datei ausgeben, was aber falsch ist.

also awk '/BlacklistSTART/{flag=1;next}/BlacklistEND/{flag=0}flag' /usr/local/etc/rc.d/meinscript = FEHLER
awk '/BlacklistSTART/{flag=1;next}/BlacklistEND/{flag=0}flag' /usr/local/etc/rc.d/meinscript_andere_datei_name =OK

wo liegt den der Fehler, dass mit $0 die gesamte datei ausgegen wird und nicht das gescuhte zwischen den Patterns?
Danke

Benutzeravatar
Meillo
Moderator
Beiträge: 9230
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk, komisches verhalten

Beitrag von Meillo » 27.11.2017 22:40:36

Mein gawk 4.0.1 arbeitet wie gewuenscht.

Wie ist denn das Verhalten, wenn du statt einer Kopie der Datei einen Hardlink oder einen Softlink verwendest?


Du solltest auch noch daran denken, dass die Start- und Endpatterns in der Datei auch im AWK-Kommando vorkommen! Verwende dort also besser /B[l]acklistSTART/, um verwirrende Ergebnisse zu vermeiden, oder verwende Anker. (Das ist wie bei `ps | grep'.)


Btw: Du kannst dir das `next' sparen wenn du die Reihenfolge tauschst:

Code: Alles auswählen

awk '/BlacklistEND/{flag=0} flag; /BlacklistSTART/{flag=1}'
Use ed once in a while!

Antworten