AWK - umgekehrtes Verhalten von Operatoren?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

AWK - umgekehrtes Verhalten von Operatoren?

Beitrag von ReturnToSender » 26.12.2018 11:04:23

Guten Morgen

Ich bastel gerade an einem AWK-Befehl und verstehe die Welt nicht mehr. Das Verhalten ist genau umgekehrt zu dem, was ich eigentlich möchte:

Dieser Befehl sollte alle Interfaces listen, die "UP" sind, zeigt aber nichts:

Code: Alles auswählen

$ ip link show | awk '"$0" ~ "LOWER_UP" { print $0; }' 
Dieser Befehl sollte alle Interfaces listen, die Down sind, zeigt aber die aktiven:

Code: Alles auswählen

$ ip link show | awk '"$0" !~ "LOWER_UP" { print $0; }' 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
Die beiden Vergleichsoperatoren ~ für "enthalten" und !~ für "nicht enthalten" werden anscheinend genau umgekehrt ausgeführt. Welchen Fehler mache ich hierbei?

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: AWK - umgekehrtes Verhalten von Operatoren?

Beitrag von RobertDebiannutzer » 26.12.2018 11:34:50

Der Fehler, den Du machst, ist, dass Du nicht "grep" benutzt? :wink:
Anyway, mach' mal die Anführungszeichen (") um $0 weg...
Und "{ print $0; }" kannst Du Dir auch sparen, da das beim Match eh die default-action ist.
Zitat manpage awk:
If {action} is omitted it is implicitly { print }.

ReturnToSender
Beiträge: 123
Registriert: 23.10.2018 18:06:09

Re: AWK - umgekehrtes Verhalten von Operatoren?

Beitrag von ReturnToSender » 26.12.2018 12:33:52

Danke! Das hat meinen AWK-Fehler behoben. Und ich habs auch auf grep verschoben, ist wirklich einfacher.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: AWK - umgekehrtes Verhalten von Operatoren?

Beitrag von rendegast » 26.12.2018 19:56:01

Geht auch

Code: Alles auswählen

ip l  |  awk '/LOWER_UP/'
('ip l' ist die hier mögliche Kurzform für 'ip link show', genauso auch 'ip a')
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

RobertDebiannutzer
Beiträge: 385
Registriert: 16.06.2017 09:52:36

Re: AWK - umgekehrtes Verhalten von Operatoren?

Beitrag von RobertDebiannutzer » 27.12.2018 10:27:48

Schlau ist awk auch, wenn man nur die Interface-Namen möchte (was ja wahrscheinlich meistens der Fall ist):

Code: Alles auswählen

ip l | awk '/LOWER_UP/ { sub(/:$/, "", $2); print $2 }'
(Die Doppelpunkte nach den Interface-Namen werden natürlich gleich mitentfernt...)

Antworten