(Bash) Führende Nullen vor Zahlen hängen

L

loer

Grünschnabel
Servus miteinander,

um den Effekt zu erreichen, der im Thread genannt ist, habe ich folgendes Script gedrechselt:

Code:
#!/bin/bash
# Schraubt führende Nullen an Zahlen. 
# Benutzung: nul.sh [Zahl] [Ziffern gesamt]

i=1
j=1
string=$1

while [ $1 -lt $((10**$(($2-$i)))) ]
	do
		let i+=1
	done

let i-=1

while [ $j -le $i ]
	do
		string=0$string
		let j+=1
	done

echo $string

Eine Menge Zeilen für so wenig Nutzen, oder? Daher meine Frage, wie das eleganter zu lösen ist, oder ob es gar ein passendes GNU Tool gibt, welches ich übersehen habe (seq -w nach grep umleiten funktioniert nur leidlich...)

Gruß,
Loer
 
Code:
#!/usr/bin/ruby
puts ARGV[0].rjust(ARGV[1].to_i, '0')
Da gibt es viele Möglichkeiten. Das ist die Kürzeste, die mir spontan eingefallen ist. Aufruf: ./chuck.rb norris 30

Edit: Immer dieser Bytepool ;)
 
Zuletzt bearbeitet:
Ja, der ist nicht schlecht, der bytepool, wa? :-)
 
Hi,

@slackfan
Ja, Ruby muss ich irgendwann auch nochmal lernen. :)
Nur dumm dass der Tag nur 24 Stunden hat, wer immer sich das ausgedacht hat sollte bestraft werden. ;)
Aber erst stehen auch noch Lisp, Ada, die Python C Bindings und Schwedisch auf dem Programm. ;)

@loer
Das bash-builtin printf funktioniert fast genauso wie das printf von C. Dummerweise scheint das dermassen bekannt zu sein, dass die Manpage-Schreiber es nicht wichtig fanden die Formatierungsmoeglichkeiten mit in die Manpage aufzunehmen. ;)
Aber Google hilft weiter: http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

Im Grunde ist es aber recht simpel: Das erste Argument ist der Formatierungsstring, die folgenden Argumente die einzusetzenden Werte/Variablen. Das %i besagt dass es eine ganze Zahl sein soll, und %.5i besagt, dass die Zahl mindestens 5 Stellen haben soll. '\n' steht wie immer einfach nur fuer einen Zeilenumbruch.

Alles weitere bitte der Doku entnehmen. ;)

mfg,
bytepool
 
Zuletzt bearbeitet:
@loer
Das bash-builtin printf funktioniert fast genauso wie das printf von C. Dummerweise scheint das dermassen bekannt zu sein, dass die Manpage-Schreiber es nicht wichtig fanden die Formatierungsmoeglichkeiten mit in die Manpage aufzunehmen. ;)
Aber Google hilft weiter: http://en.wikipedia.org/wiki/Printf#printf_format_placeholders

Das moechte ich gerne zugunsten der bash-Autoren korrigieren. Zumindest steht in der man-page zu printf unter Debian Squeeze: "SEE ALSO printf(3)".
 
Hi,

Das moechte ich gerne zugunsten der bash-Autoren korrigieren. Zumindest steht in der man-page zu printf unter Debian Squeeze: "SEE ALSO printf(3)".
und, hast du 'man 3 printf' ausprobiert? Mir sagt er dann nur, dass es die Manpage nicht gibt. Ja, ich habe auch gesehen dass 'info coreutils "printf invocation"' ein wenig mehr hergibt, aber trotzdem finde ich, dass man die Formatierungsmoeglichkeiten durchaus nochmal in der printf Manpage selbst wiederholen duerfte. Es ist IMHO wirklich nicht ganz leicht ueber die Standard Dokus an die notwendigen Infos zu kommen, wenn man C's printf nicht kennt.

Nachtrag:
Ok, unter Ubuntu bzw. Debian braucht man fuer printf(3) das Paket manpages-dev. Das hat mich jetzt aber auch gut eine halbe Stunde gekostet um dahinter zu kommen in welchem Paket sich die entsprechende Manpage versteckt. ;)

Eventuell habe ich mich aber auch etwas dumm angestellt, ich habe mit 'apt-file search man3 | less' manuell nach printf gesucht um das richtige Paket zu finden. 'apt-file search printf*3*' haette schneller zum Ziel gefuehrt (eine Variation davon lieferte allerdings gar nix, deswegen der Rundumschlag mit man3 ;)).

mfg,
bytepool
 
Zuletzt bearbeitet:
Alternative zur printf Methode

Code:
#!/bin/bash

i=1
while [ $i -lt 101 ] ; do
  j=00$i
  echo ${j:$((-3))}
  i=$(( $i + 1 ))
done
 

Ähnliche Themen

Summe von Zahlen in einer Zeilen bilden

Last mit etc/passwd anzeigen lassen

bash: Fehlermeldung und Werte in Array sortieren?

Anzahl Elemente in Array hochzählen

Mit bash mysql in Schleife abfragen

Zurück
Oben