Nowe posty

Autor Wątek: Duże liczby "e+..."  (Przeczytany 4880 razy)

mrmadej

  • Gość
Duże liczby "e+..."
« dnia: 2012-06-04, 14:25:44 »
Hej,

Natknąłem się na problem i jakoś nie mogę sobie poradzić.
Mianowicie tworzę sobie skrypt, który zliczy mi ilość danych zbackupowanych w ciągi dnia. Wszystko pięknie fajnie, ale jak sobie sumuję i liczba powinna wyjść:
19499351443
to mi w konsoli wychodzi:
1.94994e+10

Ja wiem, że to jest "tyle samo". Ale trochę mało czytelnie.
W RH liczy się ładnie i pokazuje przyjaźnie, a w Ubuntu 11.10 jakoś nie chce.
Nie wiem gdzie może być przyczyna.
Może ktoś coś podpowie?

z góry dzięki za podpowiedź.

Pozdrawiam
Madej

Offline Paweł Kraszewski

  • Administrator
  • Guru
  • *****
  • Wiadomości: 3068
  • Lenistwo jest matką potrzeby = babcią wynalazku
    • Zobacz profil
Duże liczby "e+..."
« Odpowiedź #1 dnia: 2012-06-04, 18:13:26 »
Poprosimy kawałek skryptu wywołujący ten błąd.
Paweł Kraszewski
~Arch/Void/Gentoo/FreeBSD/OpenBSD/Specjalizowane customy

mrmadej

  • Gość
Duże liczby "e+..."
« Odpowiedź #2 dnia: 2012-06-05, 08:15:55 »
Hej,

Hmm...to nie jest żaden błąd. To jest kwestia interpretacji/przedstawiania liczb w powłoce.
Ale ok, może będzie jaśniej:
Skrypt, a właściwie polecenie, na sumować ilość danych (w KB) zapisanych w ciągu doby. Plik do obróbki, który jest wynikiem innego polecenia, ma format jak poniżej:

12341234 01-05-2012
5234514 01-05-2012
34523415 01-05-2012
...
45124124 02-05-2012
5451244564 02-05-2012
...
542454332 31-05-2012
53451454 31-05-2012

No i teraz chcę sumować to co jest w pierwszej kolumnie, ale dla każdego dnia osobno. Robię to tak:
for i in 01 02 03 ... 31
do
   var1=`cat plik | grep "$i-05-2012" | awk '{SUM += $1} END {print SUM}'`
   echo $1"-05-2012" $var1
done
Efekt jakiego oczekuje to, np dla 01-05-2012:
01-05-2012 52099163


Oczywiście ilość rekordów dla jednego dnia może być nawet 6tyś. Więc ilość danych oczywiście jest znacznie większa, przez co liczba w KB też jest znacznie większa niż w przykładzie (np 19499351443 KB, co jest ~18TB). W bash w RH wynik jest ładny, a w Ubuntu: 1.94994e+10. Sprawdzałem ustawienia locale, ale to nic nie daje.

pozdrawiam
Madej

Offline ultr

  • Users
  • Guru
  • *****
  • Wiadomości: 1177
    • Zobacz profil
Duże liczby "e+..."
« Odpowiedź #3 dnia: 2012-06-06, 23:25:51 »
Problemem jest to jak awk wyświetla duże liczby. Jeśli nie odpowiada ci domyślnie zachowanie, zdefiniuj inne:
printf("%0.0f\\n", SUM)
Co ciekawe awk zachowuje się domyślnie różnie na różnych systemach. Polecam pogooglować na ten temat. Nie wiem czy zależy to od wersji gawka, flag kompilacji, ustawień czy od czegoś innego.

mrmadej

  • Gość
Duże liczby "e+..."
« Odpowiedź #4 dnia: 2012-06-11, 08:21:04 »
Dzięki,
Działa. Googlałem przez 2 dni zanim zadałem pytanie na forum.
Praktycznie wszystko co znalazłem sprowadzało się do ustawień 'locale'.
Ale oczywiście to nie miało znaczenia.
Co więcej, na dwóch RH (5.6 i 5.7, oba 64b) są różne zachowania. Nie sprawdzałem czy wersja gawk jest taka sama.
Czekając na konkretną odpowiedź obszedłem problem stosując zwykłą inkrementację w pętli :-)

Pozdrawiam
Madej