Вопрос по math, linux – Как мне разделить в консоли Linux?

70

У меня есть переменные, и я хочу найти значение одного, деленное на другое. Какие команды я должен использовать для этого?

Это действительно связано с программированием? [stackoverflow.com/faq] Frank V
@ frank-v Bash можно использовать для программирования ... также, эта ссылка на faq не работает chomp

Ваш Ответ

12   ответов
2

$ b:

echo $((a/b))
-1

У меня тоже была такая же проблема. Целые числа легко разделить, но десятичные числа не так просты. если у вас есть 2 числа, такие как 3.14 и 2.35, и разделите числа тогда, код будет делением =echo 3.14 / 2.35 | bc                        echo & quot; $ Division & quot; цитаты разные. Не смущайтесь, он расположен прямо под кнопкой esc на клавиатуре. ЕДИНСТВЕННАЯ РАЗНИЦА - | bc, а также здесь echo работает как оператор арифметических вычислений вместо печати. Итак, я добавил echo & quot; $ Division & quot; для печати значения. Дайте мне знать, если это работает для вас. Спасибо.

Кавычки здесь не отображаются, поэтому просто ставьте кавычки (``) после = и после bc.
Это не кавычки. Это острые акценты. Они не отображаются, потому что StackOverflow использует их для выделения фрагментов кодаsome code here был просто завернут в острые акценты.
5

Linux console ты имеешь в видуBash.

ЕслиX а такжеY ваши переменные,$(($X / $Y)) возвращает то, что вы просите.

Вам не нужны $ для переменных
1

Вы также можете использовать Perl -e

perl -e 'print 67/8'
8

если вам не нужны десятичные дроби в вашем подразделении, вы можете сделать следующее:

>echo $((5+6))
11
>echo $((10/2))
5
>echo $((10/3))
3
16

variable=$(echo "OPTIONS; OPERATIONS" | bc)

например:

my_var=$(echo "scale=5; $temp_var/100 + $temp_var2" | bc)

где & quot; масштаб = 5 & quot; это точность.

man bc 

поставляется с несколькими примерами использования.

Здорово; одна вещь, чтобы отметить: не настройкаscale по умолчанию используется целочисленное деление - если вы не укажете-l, как отмечает @raytrace ниже, который, по-видимому, дает по умолчанию 20 десятичных знаков, но также загружает библиотеку с дополнительными функциями.
65

$(( ... ))

$ echo $(( 7 / 3 ))
2

Хотя я думаю, что вы ограничены целыми числами.

Да, bash ограничен целочисленной математикой.
2

что вы могли бы сделать, используя ответ raytrace. Вы можете использовать стандартный вывод другого вызова оболочки, используя обратные ссылки, чтобы затем сделать некоторые вычисления. Например, я хотел узнать размер файла из первых 100 строк из нескольких файлов. Исходный размер отwc -c в байтах, я хочу знать килобайт. Вот что я сделал:

echo `cat * | head -n 100 | wc -c` / 1024 | bc -l
11

Я все еще предпочитаю использоватьdc, который является калькулятором RPN, поэтому быстрая сессия для деления 67 на 18 с точностью до 4 цифр будет выглядеть

>dc
4k
67
18/p
3.7222
q
>

Очевидно, гораздо больше доступно:man dc

Несколько указателей, чтобы сэкономить поездку наman: RPN = обратная польская запись; в двух словах: сначала вы вводите операнды, а затем оператор. Завершающийp необходим для вывода результата. Неинтерактивная версия приведенного выше расчета:dc -e '4k 67 18 / p', Предостережение: не устанавливать точность (с{numPlaces}k) по умолчанию 0, то есть целочисленное деление.
37
echo 5/2 | bc -l

2.

это '-1'; опция в "до н.э"; позволяет плавающие результаты

Здорово; с-lпо умолчанию вы получаете 20 знаков после запятойand загружена математическая библиотека, которая определяет дополнительные функции, такие как синус; чтобы явно указать количество десятичных знаков, добавьте к выражениюscale={numPlaces}; (тоже), как показано в ответе @ user1504475. Другими словами:-l это удобная альтернатива указаниюscale=20;, но требует высокой производительности из-за загрузки библиотеки - реальное влияние, однако, кажется незначительным.
11

AWK которая является утилитой / языком, предназначенным для извлечения данных

например для 1.2 / 3.4

>echo 1.2 3.4 | awk '{ print $2/$1 }'
0.352941
1

echo "scale=4;$variablename/3"|bc

Похожие вопросы