bash skript

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Methos
Beiträge: 87
Registriert: 05.12.2003 13:43:14

bash skript

Beitrag von Methos » 14.04.2005 17:22:25

hallo, ich hoffe mal das ich hier richtig bin.

Habe folgendes geschrieben:

Code: Alles auswählen

i=00;
until [ $i -gt 23 ]; 
do
#echo $i;
less transfer.log.1 |grep 01/Mar/2005:$i | awk '{sum+=$10}; END { print sum/1024/1024 }'
i=$[$i+1];
done
Das ganze klappt soweit eigentlich auch. Allerdings werden die Zahlen die kleiner als 10 sind nicht mit einer 0 geschrieben. Also die müssten so lauten: 01 02 03 usw.
Kriegs nur irgendwie nicht hin das zu integrieren.
Hab es auch schon mit seq -w 23 versucht, aber das klappt auch nicht so Recht.

Benutzeravatar
smoon
Beiträge: 248
Registriert: 07.05.2004 15:44:57
Kontaktdaten:

Beitrag von smoon » 14.04.2005 17:35:48

Probiers mal mit folgendem:

Code: Alles auswählen

for i in `seq -f %02g 23` ; do ... ; done
Oder du foramtierst dein i einfach mit printf:

Code: Alles auswählen

i=0
until [ $i -gt 23 ] ; do
  i=`printf "%02d" $i`
  ...
  i=$(( $i+1 ))
done
smoon:#linuxger:Undernet

Methos
Beiträge: 87
Registriert: 05.12.2003 13:43:14

Beitrag von Methos » 14.04.2005 17:41:39

die erste Variante hatte ich auch schon versucht :) Da erhalte ich allerdings dann die Meldung:

line 12: 08: value too great for base (error token is "08")

Das mit printf klappt leider auch nicht :(

Benutzeravatar
smoon
Beiträge: 248
Registriert: 07.05.2004 15:44:57
Kontaktdaten:

Beitrag von smoon » 14.04.2005 17:55:04

Also das erste funktioniert bei mir ohne den Fehler. Hört sich aber danach an, als ob die bash von ner anderen Basis bei deinem $i ausgeht (wegen der führenden 0 vermutlich Oktal... Und da gehts halt nicht bis 08 ;) ). Also bei berechnungen am besten $i durch sowas ersetzen:

Code: Alles auswählen

`printf "%g" $i`
Eingesetzt in mein zweites Beispiel:

Code: Alles auswählen

i=0
until [ $i -gt 23 ] ; do
  i=`printf "%02d" $i`
  ...
  i=$(( `printf "%g" $i`+1 ))
done
smoon:#linuxger:Undernet

Methos
Beiträge: 87
Registriert: 05.12.2003 13:43:14

Beitrag von Methos » 14.04.2005 18:45:05

ah super, nun klappt es wie gewünscht :) Danke dir smoon für die schnelle Hilfe

Antworten