Hallo,
ich hänge in einem Bash-Script an folgender Stelle:
Ich lese eine Zahl aus, die so zwischen 4 und 20 Stellen hat. Zwei Vorkommaziffern, und der Rest danach. Das Komma ist ein Punkt. Also 12.234566767
Benötigt werden jedoch nur die ersten 8 Stellen (von links gelesen) und der Punkt muss weg.
Sollten es weniger als 8 Stellen sein, muss rechts mit Nullen aufgefüllt werden (also aus der Zahl 12.34 muss 12340000 werden, aus 12.34567890 muss 12345678 werden).
Kann mir da vielleicht jemand helfen?
Vielen Dank.
gelöst: Zahlenkette auf feste Länge bringen
gelöst: Zahlenkette auf feste Länge bringen
Zuletzt geändert von tuxfux am 10.10.2023 13:14:51, insgesamt 2-mal geändert.
Grüße, TuxFux
Re: Zahlenkette auf feste Länge bringen
Du könntest erst die maximale Anzahl an Nullen anhängen und dann von der Zeichenkette nur die vorderen acht Zeichen nehmen:
Die „Substring expansion“ in der zweiten Zeile ist tatsächlich Bash-spezifisch, /bin/sh darfs also in der Shebang nicht sein.
Alternativ lassen sich die ersten X Zeichen einer Zeichenkette auch mit sed etc. herausschneiden, das wäre dann Bash-unabhängig.
Code: Alles auswählen
#!/bin/bash
num=${1}00000000
printf '%s\n' "${num:0:8}"
Alternativ lassen sich die ersten X Zeichen einer Zeichenkette auch mit sed etc. herausschneiden, das wäre dann Bash-unabhängig.
Manchmal bekannt als Just (another) Terminal Hacker.
Re: Zahlenkette auf feste Länge bringen
Entschuldigung, Du warst zu schnell mit Deiner Antwort. Hast Du für den Rest auch noch eine Idee?
Grüße, TuxFux
Re: Zahlenkette auf feste Länge bringen
Etwas in einer Zeichenkette ersetzen kann die Bash mit „Pattern substitution“: ${variable/pattern/substitution}.
Das braucht nur eine kleine Ergänzung: Punkt durch nichts ersetzen und anschließend die beiden Schritte wie oben beschrieben:
Das braucht nur eine kleine Ergänzung: Punkt durch nichts ersetzen und anschließend die beiden Schritte wie oben beschrieben:
Code: Alles auswählen
#!/bin/bash
num=${1/./}00000000
printf '%s\n' "${num:0:8}"
Manchmal bekannt als Just (another) Terminal Hacker.