ubuntuusers.de

awk: nur den ersten Treffer anzeigen

Status: Gelöst | Ubuntu-Version: Ubuntu 20.04 (Focal Fossa)
Antworten |

Bleys

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

Hintergrund: Damit in einem Conky Script die Anzeige von Netzwerk relevanten Daten universell funktioniert erstelle ich ein Template das den aktuellen Schnittstellenname in eine Variable schreibt:

template0 = "${exec ip link | grep 'state UP' | awk '{print substr($2, 1, length($2)-1)}'}",

${template0} liefert dann an allen eingesetzten Stellen den passenden Namen. Das funktioniert auch. Allerdings habe ich gerade den Fall das ab und zu 2 Verbindungen (Ethernet und WLan) gleichzeitig aktiv sind und dann liefert meine Zeile beide Werte mit entsprechendem Fehler in Conky.

Kann ich awk mitgeben nur den jeweils ersten Treffer zu nehmen?

[gelöst]

Irgendwie sehe ich in letzter Zeit den Wald vor lauter Bäumen nicht mehr :/ Ich brauche ja nur grep den ersten Treffer nehmen lassen:

template0 = "${exec ip link | grep 'state UP' -m 1 | awk '{print substr($2, 1, length($2)-1)}'}",

Das funktioniert.

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9775

Wohnort: Münster

Bleys schrieb:

[…] Kann ich awk mitgeben nur den jeweils ersten Treffer zu nehmen?

Eine einfache Möglichkeit wäre nach dem Treffer das Programm zu beenden.

[…] Das funktioniert.

Schöner, weil einfacher finde ich:

ip -br link | awk '$2 ~ /UP/ {print $1; exit}' 

Bleys

(Themenstarter)

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

kB schrieb:

Eine einfache Möglichkeit wäre nach dem Treffer das Programm zu beenden.

Schöner, weil einfacher finde ich:

ip -br link | awk '$2 ~ /UP/ {print $1; exit}' 

Sehr cool, Danke!

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13217

kB schrieb:

Schöner, weil einfacher finde ich:

ip -br link | awk '$2 ~ /UP/ {print $1; exit}' 

Man braucht da nicht mal einen Regex:

1
ip -br link | awk '$2 == "UP" {print $1; exit}'

Bleys

(Themenstarter)

Anmeldungsdatum:
13. August 2006

Beiträge: 6172

rklm schrieb:

Man braucht da nicht mal einen Regex:

1
ip -br link | awk '$2 == "UP" {print $1; exit}'

Innerhalb von Conky funktioniert es so nicht weil ich ja das gesamte Template in Anführungszeichen setzen muss.

[Nachtrag]

ich muss mich korrigieren. Geht doch. Statt Anführungszeichen das komplette Template in doppelte eckige Klammern setzen:

template0 = [[${exec ip -br link | awk '$2 == "UP" {print $1; exit}'}]],
Antworten |