führende Null bei Temperaturangaben erzwingen

  • Hallo zusammen,

    mit dieser Zeile innerhalb einer Bash-Shell lese ich die Temparatur aus:

    temp=$(cat /sys/bus/w1/devices/28-3c01e076050b/w1_slave | grep -i t= | cut -c30-);

    Dann formatiere ich das Ergebnis damit:

    temp=$(echo "scale=2; $temp/1000" | bc -l)

    Bisher habe ich nichts gemerkt, aber bei den derzeitigen Temperaturen fällt mir auf, dass dann nur noch .87 dortsteht, statt 0.87.

    Ist zwar nur ein Schönheitsfehler, aber eben mnicht schön.

    Habe schon mal rumgeguckt und mit

    printf

    und

    sprintf

    getestet. Aber es enstehen nur Fehlermeldungen.

    Kann mir bitte jemand helfen und sagen, was ich falsch mache.

    Danke

    Thomas

  • Moin!

    framp

    Wenn ich das bei mir eingebe bekomme ich eine Fehlermeldung :shy:

    Das ist eine Adresse von einem DS18B20: 28-3c01e076050b . Die einmalig und damit kann es bei dir nicht gehen, auch wenn du diesen Sensor angeschlossen hast.

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • Ich glaube

    Code
    temp=$(awk "BEGIN {print $temp}")

    sollte da schon völlig ausreichend sein.

    Vielleicht kann man das Ganze auch zusammenfassen mit

    Code
    temp=$(awk "BEGIN {print $(cat /sys/bus/w1/devices/28-3c01e076050b/w1_slave | grep -i t= | cut -c30-)}")

    bin mir da aber nicht ganz sicher, weil ungetestet.

  • Ich bin jetzt etwas irritiert. Was oder wen meinst Du mit Kruecke?

    Ist es dass mein Kommentar so klingt als wenn ich es probiert habe und festgestellt habe dass es nicht bei mir geht? Du solltest mich gut genug kennen dass ich schon alleine beim Lesen des cat Befehls gesehen habe dass das bei mir nicht funktionieren wird :green_smile:

    Sofern ich richtig liege gelobe ich Besserung und formuliere das das naechste Mal in einem aehnlichen Falle deutlicher :green_smile:

    :no_sad: ... Kein Backup - kein Mitleid ... :no_sad:
    Ich nutze raspiBackup um meine Raspberries
    regelmäßig und zuverlässig
    einmal pro Woche zu sichern

  • Interessant. Punkt und Komma. Die Ländereinstellungen schlagen knallhart zu. Kann aber heute keinen klaren Gedanken mehr fassen.

    Code
    ~> temp=403 
    ~> bc -l <<< "scale=2; $temp/1000" 
    .40
    ~> printf '%1.2f\n' $(bc -l <<< "scale=2; 403/1000")
    bash: printf: .40: Ungültige Zahl.
    0,00
    ~>  printf '%1.2f\n' $(echo "scale=2; $temp/1000" | bc -l | tr '.' ',' ) 
    0,40

    Wenns ner net G'wittern tun tut.

  • Moin framp,

    mich, als Fragender, hätte diese Antwort abgeschreckt. Ist aber nur meine Meinung! Mehr will ich dazu auch nicht schreiben!!

    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"
    Vielleicht trifft man sich in der RPi-Plauderecke.
    Linux ist zum Lernen da, je mehr man lernt um so besser versteht man es.

  • framp Ich weiß, mit printf ist der Schönheitsfehler weg.
    Mein Problem ist die Sache mit den Umgebungsvariablen (LC* [?] bin momentan im Kopf nicht auf dem Damm).
    bc gibt die Zahl im amerikanischen Format aus, also mit Punkt. printf hält sich an die Ländereinstellungen und will ein Komma. printf macht die führende Null, wie Du in meinem Posting siehst.

    Wenns ner net G'wittern tun tut.

  • mich, als Fragender, hätte diese Antwort abgeschreckt.

    Ich lerne auch trotz meines Alters noch gerne dazu :green_smile: Schade dass Du dazu nicht mehr schreiben willst :nosmile: Details warum meine Antwort Dich abschreckt wuerde mich schon interessieren. Gerne auch per PN.

    :no_sad: ... Kein Backup - kein Mitleid ... :no_sad:
    Ich nutze raspiBackup um meine Raspberries
    regelmäßig und zuverlässig
    einmal pro Woche zu sichern

  • Bergwichtel Am Ende bleibt es ein Schönheitsfehler. Es ist dann halt in der Ausgabe / Anzeige ein Komma, statt eines Punkts vorhanden, dass man zur Not mit Regex kompensieren könnte. Wenn man mit dem (Temperatur)Wert rechnen wöllte, brauchts keine Null vor dem Trenner.

    Von daher ist es nahezu egal ob Komma oder Punkt.

  • So, der Haken steht in der man-Page:

    Quote from man bc

    LANG environment
    This version does not conform to the POSIX standard in the processing of the LANG environ-
    ment variable and all environment variables starting with LC_.

    printf dagegen liest LC_NUMERIC und erwartet halt Komma statt Punkt bei Zahlen mit Nachkommastellen.

    temp=$(cat /sys/bus/w1/devices/28-3c01e076050b/w1_slave | grep -i t= | cut -c30-);

    Suche mal nach: useless use of cat

    Wenns ner net G'wittern tun tut.

  • hyle Das ist immer das Problem, auf dem am wenigsten geachtet wird. Die Werte bleiben im Original, und die Ausgabe wird entsprechend behandelt.
    Bestes Beispiel: Datenbank und Datum. In die Datenbank kommt prinzipiell UTC, und für eine Anfrage wird die Lokale in UTC für das SQL-Statement umgesetzt und für die Ausgabe wird die UTC in die Lokale umgesetzt. Weltweit einsetzbar und Sommer-, Normalzeitfest.

    Wenns ner net G'wittern tun tut.

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!