Wer wget für Bandbreitenmessungen nutzt und vergleichbare Zahlen (bzw. Einheiten) benötigt, stellt schnell fest, dass das Tool (zumindest in Version 1.16) keine Möglichkeit bietet, die Werte in der Standardausgabe zu formatieren.

Beispiel:

 

wget -O /dev/null "http://gw2.ffggrz.de/1M"
2017-05-10 20:18:36 (961 KB/s) - »»/dev/null«« gespeichert [1048576/1048576]

Der Bandbreitenwert wird in KB/s, MB/s oder auch GB/s als für Menschen sinnvoll lesbare Zahl angegeben.

Wenn man das jedoch innerhalb eines Skriptes auswerten muss, ist eine Umrechnung auf eine (stets gleiche) Grundgröße (KB/s oder auch B/s) notwendig. Der Umrechnungsfaktor hängt dabei direkt an der ausgegeben Einheit.

wget -O /dev/null "$1" 2>&1 | grep "\[[0-9]*/[0-9]*\]" | awk -F'[()B ]+' '{gsub("K",1024);gsub("M",1048576);gsub("G",1073741824);print $3*$4}'
  • Der Befehl lädt eine Testdatei und leitet diese nach /dev/null um. Es erfolgt also keine Speicherung.
  • Die gesamte Textausgabe der Konsole wird zum "grep" umgeleitet.
  • grep sucht die Zeile mit der Geschwindigkeitsangabe und verwirft den Rest.
  • awk trennt die Zeile an den Klammern und dem "B" auf, damit ist in einem Feld (in $3) der Zahlenwert gespeichert und im nächsten die Bit-Größeneinheit ("K", "M", "G" in $4)
  • Die Einheit wird in einen Zahlenmultiplikatoren umgewandelt. ("K" => 1024, ...)
  • Abschließend wird $3 und $4 miteinander multipliziert und das Ergebnis ausgegeben.

 

Sonderfall für Zabbix-Agenten

Da Zabbix "$1" als Parameter innerhalb der Agenten verwendet, muss awk das $-Zeichen escapen.

UserParameter=statistics.wget[*],wget -O /dev/null "$1" 2>&1 | grep "\[[0-9]*/[0-9]*\]" | awk -F'[()B ]+' '{gsub("K",1024);gsub("M",1048576);gsub("G",1073741824);print $$3*$$4}'