Nowe posty

xx Problem ze sterownikami. (5)
2024-04-13, 21:25:16
xx Instalacja xfce4 (2)
2024-04-13, 16:20:17
xx Serie kompilacji bez instalacji dla “emerge” w Gentoo (2)
2024-04-08, 18:40:04
xx Plasma 6 w Neonie ssie trochę mniej ... (17)
2024-04-05, 10:03:46
xx Problem z Linux Lite po instalacji (3)
2024-04-03, 14:23:40
xx Jak właczyć num locka przy starcie systemu debian 12? (12)
2024-04-02, 17:43:54
xx Brak dźwieku w systemie. (5)
2024-04-02, 16:13:41
xx Dystrybucja pod HP Omen (7)
2024-03-29, 11:33:05
xx [Poradnik] Wyszukiwanie Sterowników (2)
2024-03-27, 21:08:23
xx Ile pingwinów? (1)
2024-03-27, 08:59:24

Autor Wątek: Duże liczby "e+..."  (Przeczytany 4869 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: 3056
  • 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