The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Помогите двоешнику с awk и большими числовыми значениями"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Разное / Linux)
Изначальное сообщение [ Отслеживать ]

"Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Rom1 (ok) on 15-Мрт-11, 11:29 
Вот простой пример:
# echo 1234567890 | awk '{sum = $1 * 2; print sum;}'
2.46914e+09

К своему стыду даже не знаю как такой вид записи называется :(

Как заставить awk выводить большие цифровые значения в простом виде, для этого примера вот в таком: 1234567890 * 2 = 2469135780

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от YuryD (??) on 15-Мрт-11, 11:43 
> Как заставить awk выводить большие цифровые значения в простом виде, для этого
> примера вот в таком: 1234567890 * 2 = 2469135780

printf "%s" ?

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Rom1 (ok) on 15-Мрт-11, 11:58 
>  printf "%s" ?

Причем тут "%s"? Это же не строка.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Pahanivo (ok) on 15-Мрт-11, 12:37 
>>  printf "%s" ?
> Причем тут "%s"? Это же не строка.

а у меня робит ))
# echo 1234567890 | awk '{sum = $1 * 2; print sum;}'
2469135780
# uname
FreeBSD

попробуй так:
echo 1234567890 | awk '{printf "%u\n", $1 * 2;}'
2147483648

только с числами >32bit врядли будет работать корректно)

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Rom1 (ok) on 15-Мрт-11, 12:53 
> попробуй так:
> echo 1234567890 | awk '{printf "%u\n", $1 * 2;}'
> 2147483648
> только с числами >32bit врядли будет работать корректно)

# echo 1234567890 | awk '{printf "%u\n", $1 * 2;}'
2147483647

Режет он её. Не подойдёт так.
Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Rom1 (ok) on 15-Мрт-11, 13:34 
Короче навертел чего-то, получилось вроде:
# echo 1234567890 | awk '{print $1^2; value = sprintf("%f", $1^2); split(value, parts, "."); print parts[1];}'
1.52416e+18
1524157875019052032

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

6. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Andrey Mitrofanov on 15-Мрт-11, 13:58 
> # echo 1234567890 | awk '{print $1^2; value = sprintf("%f", $1^2); split(value,
> parts, "."); print parts[1];}'
> 1.52416e+18
> 1524157875019052032

Точность вычислений немного-таки подрезает "хвости":

$ bc
bc 1.06.94
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
1234567890*1234567890
1524157875019052100
_


И, кстати, вот так Ж^) короче:

$ echo 1234567890 | awk '{printf("%-.0f\n", $1^2)}'
1524157875019052032
$ _

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Помогите двоешнику с awk и большими числовыми значениями"  +/
Сообщение от Rom1 (ok) on 15-Мрт-11, 15:02 
> Точность вычислений немного-таки подрезает "хвости":

Для моей задачи не так и критично.


> И, кстати, вот так Ж^) короче:
> $ echo 1234567890 | awk '{printf("%-.0f\n", $1^2)}'
> 1524157875019052032
> $ _

Так лучше, спасибо ;)

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру