Невозможно суммировать числа, полученные от stdin, используя bc

Я пытаюсь вычислить среднюю энтропию файлов, содержащихся в папке, используя:

{ echo '('; find . -type f -exec entropy {} \; | \ grep -Eo '[0-9.]+$' | \ sed -r 's/$/+/g'; echo '0)/'; find . -type f | wc -l; } | \ tr -d '\n' | bc -l 

entropy – исполняемый файл, который вычисляет энтропию Шеннона файла, давая выходы вида:

 $ entropy foo foo: 5.13232 

Вышеупомянутые ошибки команды:

 (standard_in) 1: syntax error 

Однако сгенерированный вывод, похоже, не имеет проблем:

 $ { echo '('; find . -type f -exec entropy {} \; | \ grep -Eo '[0-9.]+$' | \ sed -r 's/$/+/g'; echo '0)/'; \ find . -type f | wc -l; } | \ tr -d '\n' (5.13232+2.479+1.4311+0)/3 

И это тоже работает:

 $ echo '(2.1+2.1)/2' | bc -l 2.1 

Что не так с указанной командой?

2 Solutions collect form web for “Невозможно суммировать числа, полученные от stdin, используя bc”

И это тоже работает: echo '(2.1+2.1)/2' | bc -l echo '(2.1+2.1)/2' | bc -l

Ах, но вы пробовали:

 echo '(2.1+2.1)/2' | tr -d '\n' | bc -l (standard_in) 1: syntax error 

Использование echo -n выполнит одно и то же – нет новой строки перевода, и это ваша проблема.

bc имеет некоторый довольно специфический синтаксис. dc менее разборчив:

 find . -type f -exec entropy \{\} + | sed 's/.*://;N;N;s/\n[^:]*:/+/g;s/+//;s|$| 3/p|' | dc 

Я думаю, что делает то, что вы пытаетесь сделать, но я не совсем уверен. Образец вывода больше одной строки поможет.

  • хочет понять смысл этих символов один за другим
  • Как определить функцию `bc` для последующего использования?
  • шкала bc: Как избежать округления? (Рассчитайте небольшую биномиальную вероятность)
  • Сложность преобразования из двоичного в шестнадцатеричное с использованием bc
  • Как округлить или преобразовать значение float в int с помощью bc? получение: "(standard_in) 1: синтаксическая ошибка"
  • Разница трубопроводов grep -c с различным регулярным выражением до bc
  • Поддерживает ли bc шестнадцатеричные вычисления?
  • Shell Scripting: вычислить мощность числа с реальным числом в качестве показателя
  • bc выводит двоичный код, как куски, разделенные пробелами
  • Поплавковые операции с bc неточны?
  • Почему bc выходит 0 при делении на 0?
  • Interesting Posts

    Ошибка обновления mint Linux

    Как закончить пароль? (Для создания основной учетной записи)

    В сценарии bash, что отличается между объявлением и нормальной переменной?

    Свободное место на диске из файла журнала JBoss, который все еще записывается в

    Настройка оболочки OpenSSH для любого / любого подключаемого имени пользователя

    ошибки времени выполнения, откуда они взялись?

    $ SHELL хранит путь к оболочке по умолчанию в Linux?

    Изменение размера корня qcow2

    Тестирование Debian не позволяет получить информацию о экране и контролировать яркость с помощью Gnome 3.21.90

    Почему нет? регулярный символ создает совпадение в sed?

    Как отлаживать задержки доставки электронной почты?

    Создание текстовых переменных Conky с нулевым заполнением?

    Может ли написать stdout место противодавления в процессе?

    Обратная связь при вводе паролей без раскрытия длины

    Коэффициенты Regex не работают с локацией

    Linux и Unix - лучшая ОС в мире.