Ausgabe konvertieren/abschneiden - Einzeiler

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Quickly1971 » 04.02.2018 17:30:26

Hallo Leute.
Ich bin gerade echt am verzweifeln. Ich möchte mit meinem Zabbix einen LSI Controller überwachen. Da komme ich nicht weiter. Ich suche einen Einzeiler.

Ich bin gehkommen bis...

Eingabe:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:

Code: Alles auswählen

Degraded(NeedAttention)
Das (NeedAttention) muss weg. Darf nur noch sein Degraded.

Basisbefehl:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"
Ausgabe:

Code: Alles auswählen

Battery State: Degraded(Need Attention)
Optional, keine Ahnung ob und wie das gehen soll, ich schreibe mal so los:
Wenn Ausgabe enthällt "Good", dann Wert "0".
Wenn das Wort "Good" nicht enthalten, dann Wert "1" (also irgend ein anderes Wort/Wert).

Wäre für Hilfe dankbar. Und es muss ein Einzeler sein. :facepalm:

Vielen Dank, Lars
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

inne
Beiträge: 3289
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von inne » 04.02.2018 18:02:10

Hallo,

wie schaut denn die Ausgabe von /usr/sbin/megacli -AdpBbuCmd -a0 ohne alle Filter aus? Vlt. gibt es bessere Lösungsansätze z.B. AWK.
Quickly1971 hat geschrieben: ↑ zum Beitrag ↑
04.02.2018 17:30:26
Eingabe:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:

Code: Alles auswählen

Degraded(NeedAttention)
Das (NeedAttention) muss weg. Darf nur noch sein Degraded.
Ist da wirklich kein Leerzeichen zwischen?

Code: Alles auswählen

$ echo "Degraded(Need Attention)" | sed 's/(.*)//'
Degraded
Zum optionalen Teil:

Code: Alles auswählen

echo "Good" | gawk 'BEGIN{foo="0"} END{print foo} /Good/ {foo="1"}'
1

Code: Alles auswählen

$ echo "Good" | grep -q Good && echo 1 || echo 0
1
Zuletzt geändert von Anonymous am 04.02.2018 18:08:34, insgesamt 2-mal geändert.

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

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Meillo » 04.02.2018 20:26:18

Quickly1971 hat geschrieben: ↑ zum Beitrag ↑
04.02.2018 17:30:26
Eingabe:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "
Ausgabe:

Code: Alles auswählen

Degraded(NeedAttention)

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0 | sed -n '/^Battery State: /{s///;s/(.*//;p;q}'
Optional, keine Ahnung ob und wie das gehen soll, ich schreibe mal so los:
Wenn Ausgabe enthällt "Good", dann Wert "0".
Wenn das Wort "Good" nicht enthalten, dann Wert "1" (also irgend ein anderes Wort/Wert).
Was meinst du mit ``Ausgabe''? ... doch wohl eher den Exitcode und nicht die Textausgabe? Faende ich sonst naemlich recht seltsam und unueblich.

Falls es um den Exitcode geht, dann schreibst du an's Ende der Pipeline einfach noch diesen Befehl von inne hin:

Code: Alles auswählen

| grep -q Good
Use ed once in a while!

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Quickly1971 » 04.02.2018 21:42:37

Hallo.
Bin gerade wieder rein gekommen. Erst mal vielen Dank. Ich werde es in den nächsten 2 Tagen testen. Hoffe ich komme zum Erfolg. :THX:

Weiterhin:
wie schaut denn die Ausgabe von /usr/sbin/megacli -AdpBbuCmd -a0 ohne alle Filter aus? Vlt. gibt es bessere Lösungsansätze z.B. AWK.

Code: Alles auswählen

root@proxmox1:~# /usr/sbin/megacli -AdpBbuCmd -a0

BBU status for Adapter: 0

BatteryType: iBBU
Voltage: 4013 mV
Current: 0 mA
Temperature: 25 C
Battery State: Degraded(Need Attention)
                A manual learn is required.
BBU Firmware Status:

  Charging Status              : None
  Voltage                                 : OK
  Temperature                             : OK
  Learn Cycle Requested                   : Yes
  Learn Cycle Active                      : No
  Learn Cycle Status                      : OK
  Learn Cycle Timeout                     : No
  I2c Errors Detected                     : No
  Battery Pack Missing                    : No
  Battery Replacement required            : No
  Remaining Capacity Low                  : No
  Periodic Learn Required                 : No
  Transparent Learn                       : No
  No space to cache offload               : No
  Pack is about to fail & should be replaced : No
  Cache Offload premium feature required  : No
  Module microcode update required        : No


GasGuageStatus:
  Fully Discharged        : No
  Fully Charged           : No
  Discharging             : Yes
  Initialized             : Yes
  Remaining Time Alarm    : No
  Discharge Terminated    : No
  Over Temperature        : No
  Charging Terminated     : No
  Over Charged            : No
  Relative State of Charge: 79 %
  Charger System State: 49169
  Charger System Ctrl: 0
  Charging current: 512 mA
  Absolute state of charge: 80 %
  Max Error: 9 %
  Battery backup charge time : 48 hours +

BBU Capacity Info for Adapter: 0

  Relative State of Charge: 79 %
  Absolute State of charge: 80 %
  Remaining Capacity: 976 mAh
  Full Charge Capacity: 1239 mAh
  Run time to empty: Battery is not being charged.
  Average time to empty: Battery is not being charged.
  Estimated Time to full recharge: Battery is not being charged.
  Cycle Count: 32
Max Error = 9 %
Remaining Capacity Alarm = 120 mAh
Remining Time Alarm = 10 Min

BBU Design Info for Adapter: 0

  Date of Manufacture: 01/08, 2014
  Design Capacity: 1215 mAh
  Design Voltage: 3700 mV
  Specification Info: 33
  Serial Number: 811
  Pack Stat Configuration: 0x6490
  Manufacture Name: LS1191002A
  Firmware Version   :
  Device Name: 3150302
  Device Chemistry: LION
  Battery FRU: N/A
  Transparent Learn = 0
  App Data = 0

BBU Properties for Adapter: 0

  Auto Learn Period: 28 Days
  Next Learn time: Sat Feb 10 01:00:00 2018
  Learn Delay Interval:167 Hours
  Auto-Learn Mode: Enabled

Exit Code: 0x00
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

inne
Beiträge: 3289
Registriert: 29.06.2013 17:32:10
Lizenz eigener Beiträge: GNU General Public License
Kontaktdaten:

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von inne » 04.02.2018 21:57:55

Meillos sed passt ja.

Was macht denn das s///?
(Das p gibt nur die betreffenden Zeilen/Musterbereich aus – ähnlich einem grep und q beendet das Skript nach dem ersten Match – Richtig?)

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Quickly1971 » 04.02.2018 22:07:50

Hi inne.
Wollte zwar ins Bett... hänge jedoch fastziniert an Euren Befehlen. :D

Befehl:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0 | sed -n '/^Battery State: /{s///;s/(.*//;p;q}'
Ausgabe:

Code: Alles auswählen

Degraded
Das schon mal perfekt.

Vermutlich bin ich auch gerade zu belämmert (Hatte Stammtisch :lol: ). Keine Sorge... nur Testserver.
Wenn das mit meinem optionalen Wunsch echt gehen sollte... ich bekomme es nicht hin.
Die Ausgabe sollte 0 sein, wenn Ergebnis der Abfrage "Good" enthält.

Bin ich zu blöde zu. Bekomme ich nicht hin.
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Quickly1971 » 04.02.2018 22:37:16

So, jetzt aber... das geht. :THX: ... denke ich.

Der Status von BBU ist zur Zeit = Degraded

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Good && echo 0 || echo 1
Ausgabe = 1

Gegenprobe:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Degraded && echo 0 || echo 1
Ausgabe = 1

:hail:

Also kann ich für mein Zabbix nehmen:

Code: Alles auswählen

system.run[/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|head -n1|cut -d ":" -f 2|tr -d " "| sed 's/(.*)//'| grep -q Good && echo 0 || echo 1]
Könnt Ihr das so bestätigen? :mrgreen:
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

Quickly1971
Beiträge: 110
Registriert: 08.05.2009 15:26:32

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Quickly1971 » 04.02.2018 23:27:29

Und hätte ich Esel nicht mit dem schwern Teil vom Script angefangen, dann hätte ich auch ablesen können

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|grep -vc Good
Ausgabe = 0
Der Mensch hat drei Wege, klug zu werden.
Erstens durch Nachdenken: Das ist der edelste.
Zweitens durch Nachahmen: Das ist der leichteste.
Drittens durch Erfahrung: Das ist der bitterste.

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

Re: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von Meillo » 05.02.2018 06:50:16

inne hat geschrieben: ↑ zum Beitrag ↑
04.02.2018 21:57:55
Was macht denn das s///?
Es ersetzt die zuletzt verwendete RegExp durch den leeren String.

(Das p gibt nur die betreffenden Zeilen/Musterbereich aus – ähnlich einem grep und q beendet das Skript nach dem ersten Match – Richtig?)
`p' gibt den aktuellen Pattern-Space aus ... das ist ungefaehr das was du meinst.

`q':
Immediately quit the sed script without processing any
more input, except that if auto-print is not disabled
the current pattern space will be printed.
Da hier, mittels `-n', auto-print deaktiviert ist, wird das Script nach `q' sofort beendet.


@Quickly1971: `grep -vc' zu verwenden ist clever. ;-)
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: Ausgabe konvertieren/abschneiden - Einzeiler

Beitrag von heisenberg » 22.03.2018 19:34:58

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep "Battery State"|grep -vc Good
Der da geht auch:

Code: Alles auswählen

/usr/sbin/megacli -AdpBbuCmd -a0|grep -qi "Battery State.*good" ; echo $?

Antworten