Предположим, что два числа хранятся в двух разных файлах, a.txt
и b.txt
.
Каждое число достаточно большое (более 30 цифр), чтобы его не поддерживал числовой тип данных, используемый bash
.
Как я могу добавить их в оболочку?
bash
shell
arithmetic
voldemort619
источник
источник
python
или подобное в этом случае.python
как подсказал phkОтветы:
Предполагая, что они десятичные числа, вы можете сделать:
Остерегайтесь того, что
bc
строки переносят очень длинные числа (более 68 или 69 цифр в зависимости от реализации). С помощью GNUbc
вы можете отключить его, установивBC_LINE_LENGTH
переменную окружения в 0, например:источник
Хитрость заключается в том, чтобы не использовать
bash
для выполнения сложения 1 .Сначала прочитайте каждое число в отдельную переменную. Это предполагает, что файлы содержат только номер и никакой другой информации.
Затем используйте
bc
калькулятор, чтобы получить результат:bc
является "арифметическим языком произвольной точности и калькулятором".Чтобы сохранить результат в переменной
c
:Если
<<<
синтаксис кажется странным (он называется «здесь-строкой» и является расширением синтаксиса оболочки POSIX, поддерживаемогоbash
некоторыми другими оболочками), вместо этого вы можете использоватьprintf
для отправки дополненияbc
:И сохраняем результат
c
снова:1 Использование
bash
для сложения двух чрезвычайно больших чисел потребует реализации вbash
скрипте подпрограммы для выполнения арифметики произвольной точности . Это вполне выполнимо, но обременительно и не нужно, поскольку каждый Unix поставляется с таким,bc
который уже предоставляет вам эту услугу относительно простым и доступным способом.источник
read a < a.txt
. Это также позаботится об удалении начальных и конечных пробелов, если таковые имеются (при условии,$IFS
что они не были изменены).echo "\"hello\""
, вещь внутри$(...)
не является строкой, передаваемой в качестве аргумента другой программе, и оболочка знает, как обращаться с вложением кавычек. Это также, почему использование,$(...)
а не backticks лучше; Вы можете писать$( ... $( ... ) )
без какой-либо двусмысленности, тогда как то же самое с использованием обратных кавычек ... неудобно.bc
.Как сказал Стефан и Кусалананда , «на самом деле, просто используйте bc», но если вы действительно хотите использовать bash для добавления, вот отправная точка (только положительные целые числа) - я оставлю это в качестве упражнения для читателя, чтобы реализовать десятичные и отрицательные числа:
Я оставил
bc
сравнение там, но закомментировал, для сравнения.источник