Variierende Zahl umwandeln (sed?)

E

-eraz-

Tripel-As
Ich verwende einen Zahlenraum zwischen 1 und 365.
Einzelne Zahlen werden durch ein Skript automatisch weiterverarbeitet. Bei Zahlen zwischen 100 und 365 funktioniert das auch ohne Probleme. Allerdings habe ich bei allen Zahlen unter 100 das Problem, dass diese als

001
002
003
051
099

usw. ausgegeben werden. Die Ausgabe kann ich leider nicht verändern. Ich muss aber irgendwie die Nullen die voranstehen wegbekommen, weil ich das Format so nicht verwenden kann. Kann ich das vielleicht irgendwie per 'sed' oder so machen?
 
Hi,

da gibt es Moeglichkeiten en masse. Ein paar Beispiele:

Code:
$ a=001
$ b=098
$ printf "%d\n" $a
1
$ echo $b | tr '0' ' '
 98
$ echo $a | sed 's/0*//'
1
Wobei tr wohl am wenigsten elegant ist.

mfg,
bytepool
 
Hi,
weil es so auch gleich alle 0 ersetzt
hehe, stimmt, aber wer kann so frueh am Morgen auch erwarten dass das Gehirn schon funktioniert. ;)

In der bash koennte man die entsprechenden Variablen auch einfach direkt als integer deklarieren:
Code:
$ declare -i foo
$ foo=001
$ echo $foo
1
mfg,
bytepool
 
Zuletzt bearbeitet:
Die Variable als integer setzen ist eigentlich die noch schönere Methode, hab's gleich ausprobiert und was abartiges festgestellt. ^^


Code:
[root@xxx ]# declare -i xx
[root@xxx ]# xx=01
[root@xxx ]# echo $xx
1
[root@xxx]# xx=022
[root@xxx]# echo $xx
18
[root@xxx]# xx=23
[root@xxx]# echo $xx
23
[root@xxx]# xx=0234
[root@xxx]# echo $xx
156
[root@xxx]# xx=234
[root@xxx]# echo $xx
234
[root@xxx]# xx=0811
bash: 0811: value too great for base (error token is "0811")
Warum ist das so?
 
Zahlen, die mit 0 anfangen werden wohl als oktalzahlen interpretiert. Also zahlen mit der Basis 8.
zb
022= 2*8+2=18
0234=2*8^2+3*8+4=156

und das du 0811 nicht eingeben kannst liegt daran, das die Zahlen in der oktalbasis von 0-7 gehen. Wenn du die Basis der zahl festlegen willst kannst du "BASIS#ZAHL" eingeben, also
Code:
marcellus@rara ~ $ declare -i nummer
marcellus@rara ~ $ nummer=0123
marcellus@rara ~ $ echo $nummer
83
marcellus@rara ~ $ nummer=10#0123
marcellus@rara ~ $ echo $nummer
123
 

Ähnliche Themen

OpenSuse 11.1 USB Festplatte wird nicht erkannt

Server-Monitoring mit RRDTool

CGI laesst sich nicht ausfuehren

Zurück
Oben