gelöst: Zahlenkette auf feste Länge bringen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tuxfux
Beiträge: 118
Registriert: 16.02.2011 18:00:52
Lizenz eigener Beiträge: MIT Lizenz

gelöst: Zahlenkette auf feste Länge bringen

Beitrag von tuxfux » 10.10.2023 11:14:22

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.
Zuletzt geändert von tuxfux am 10.10.2023 13:14:51, insgesamt 2-mal geändert.
Grüße, TuxFux

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Zahlenkette auf feste Länge bringen

Beitrag von JTH » 10.10.2023 11:21:18

Du könntest erst die maximale Anzahl an Nullen anhängen und dann von der Zeichenkette nur die vorderen acht Zeichen nehmen:

Code: Alles auswählen

#!/bin/bash
num=${1}00000000
printf '%s\n' "${num:0:8}"
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.
Manchmal bekannt als Just (another) Terminal Hacker.

tuxfux
Beiträge: 118
Registriert: 16.02.2011 18:00:52
Lizenz eigener Beiträge: MIT Lizenz

Re: Zahlenkette auf feste Länge bringen

Beitrag von tuxfux » 10.10.2023 11:41:55

Entschuldigung, Du warst zu schnell mit Deiner Antwort. Hast Du für den Rest auch noch eine Idee?
Grüße, TuxFux

JTH
Moderator
Beiträge: 3023
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Zahlenkette auf feste Länge bringen

Beitrag von JTH » 10.10.2023 12:09:30

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:

Code: Alles auswählen

#!/bin/bash
num=${1/./}00000000
printf '%s\n' "${num:0:8}"
Manchmal bekannt als Just (another) Terminal Hacker.

tuxfux
Beiträge: 118
Registriert: 16.02.2011 18:00:52
Lizenz eigener Beiträge: MIT Lizenz

Re: Zahlenkette auf feste Länge bringen

Beitrag von tuxfux » 10.10.2023 13:14:33

Perfekt, vielen herzlichen Dank!
Grüße, TuxFux

Antworten