awk $n - Ergebnis Zahl ohne Doppelpunkt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
gugus
Beiträge: 385
Registriert: 04.09.2002 17:41:17
Wohnort: da wo ich zu Hause bin

awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von gugus » 14.03.2024 17:51:20

Hallo zusammen
Ich habe ein kleines Prrogramm mit dem ich an einer Steckdosenleiste die via USB angeschlossen ist eine einzelne Steckdose ein/ausschalten kann.

Nun möchte ich gerne die Nummer der geschaltenen Steckdose in einem Script weiterverwenden.
Dazu gebe ich ein

Code: Alles auswählen

/usr/bin/sispmctl -gall

Accessing Gembird #0 USB device 004
Status of outlet 1:     off
Status of outlet 2:     off
Status of outlet 3:     off
Status of outlet 4:     on

Ich hätte gerne die Nummer der eingeschaltener Position, die 4 in diesem Fall als Variable.

Code: Alles auswählen

/usr/bin/sispmctl -gall | grep on | awk '{print $4 }'
4:
Nur dass in der Ausgabe dann "4:" erscheint, also mit Doppelpunkt.
Wie bekomme ich die Ausgabe ohne Doppelpunkt hin.

Im Weiteren, wenn 2 Steckdosen eingeschaltet sind sieht es so aus

Code: Alles auswählen

/usr/bin/sispmctl -gall | grep on | awk '{print $4 }'
1:
4:
Da wären 2 Variablen notwendig.
Von der Idee her würde ich dann 4 Variablen auf 1 bis 4 testen und entsprechend auf true setzen.
Geht das so ?

gruss

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

Re: awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von Meillo » 14.03.2024 18:02:05

Hier eine Variante nur mit sed statt grep+awk:

Code: Alles auswählen

sed -n '/on$/s/^Status of outlet \([0-9]\):.*/\1/p'

Wenn du vier Shellvariablen haben willst, dann wuerde ich fuer jede einen eigenen Befehl machen. Etwa in der Art:

Code: Alles auswählen

cmd="/usr/bin/sispmctl -gall"
eins=`$cmd | sed -n '/^Status of outlet 1:/s/.* //p'`
zwei=`$cmd | sed -n '/^Status of outlet 2:/s/.* //p'`
...

P.S.:
Ich kann dir das auch fuer awk zusammenschreiben, wenn dir das lieber ist. Dort kannst du sub() bzw. gsub() ebenso verwenden wie das s///-Kommando bei sed. Du kannst die Funktionen auf die ganze Zeile ($0) oder auf einzelne Felder (z.B. $5) anwenden. Siehe Manpage. ... oder nochmal hier fragen.
Use ed once in a while!

Benutzeravatar
heisenberg
Beiträge: 4123
Registriert: 04.06.2015 01:17:27
Lizenz eigener Beiträge: MIT Lizenz

Re: awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von heisenberg » 14.03.2024 18:06:24

In der bash mit gawk in ein Array einlesen:

Code: Alles auswählen

read -a powered_on_outlets < <(/usr/bin/sispmctl -gall \
    | gawk '
       match($0,/outlet ([0-9]+).*on/,matches)  {
          printf "%s ",matches[1]}'   )

echo "${powered_on_outlets[@]}"
Edit: Fehler korrigiert.
Zuletzt geändert von heisenberg am 14.03.2024 20:08:02, insgesamt 6-mal geändert.

gugus
Beiträge: 385
Registriert: 04.09.2002 17:41:17
Wohnort: da wo ich zu Hause bin

Re: awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von gugus » 14.03.2024 18:40:27

Wow, super danke.
Muss mal sehen was am besten passt, variable oder array ...
:THX:

HumiNi
Beiträge: 559
Registriert: 02.10.2014 21:46:18

Re: awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von HumiNi » 15.03.2024 11:56:08

Meillo hat geschrieben: ↑ zum Beitrag ↑
14.03.2024 18:02:05

Code: Alles auswählen

sed -n '/on$/s/^Status of outlet \([0-9]\):.*/\1/p'
Und wenn es mehr als 9 Steckdosen sein dürfen:

Code: Alles auswählen

sed -n '/on$/s/^Status of outlet \([0-9]*\):.*/\1/p'
Es macht übrigens viel wacher, den Kaffee über die Tastatur zu kippen, statt ihn zu trinken.

gugus
Beiträge: 385
Registriert: 04.09.2002 17:41:17
Wohnort: da wo ich zu Hause bin

Re: awk $n - Ergebnis Zahl ohne Doppelpunkt

Beitrag von gugus » 15.03.2024 14:10:14

Danke, die Leiste hat nur 4 Steckdosen. :mrgreen:

Antworten