Деление с плавающей запятой с bc в одной команде

Я пытаюсь преобразовать байты в ТБ из определенного совпадения в команде/файле.

У меня есть команда:

var=$(($(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$//)/1000**4)) ; printf $var

Предполагается, что значение должно быть 6.182, но оно печатает только 6. Я просто не могу понять, как использовать bc в этой команде для получения плавающих значений.

test.txt выглядит примерно так:

  "a": 90919780478976,
  "b": 150812851408896,
  "c": 86337338950671,
  "miscellaneous": 6182842641393,
  "d": 0,
  "e": 58292669816832

person suhas savkoor    schedule 26.12.2018    source источник
comment
Опубликовать содержимое test.txt   -  person Inian    schedule 26.12.2018
comment
Как выглядит содержимое test.txt?   -  person lurker    schedule 26.12.2018
comment
Отредактировал мой пост с содержанием   -  person suhas savkoor    schedule 26.12.2018
comment
Хорошо, я провел небольшой поиск и смог сделать это: echo scale=1;$(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$//)/1000.0 | bc Но 1000 ** 4 не будет работать, так как масштаб, кажется, только для деления   -  person suhas savkoor    schedule 26.12.2018
comment
Кажется, дерьмовый способ сделать это: echo scale=3;$(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$//)/1000.0/1000.0/1000.0/1000.0 | до н.э   -  person suhas savkoor    schedule 26.12.2018
comment
Нвм, понял. export TB=$((1000**4));echo scale=3;$(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$//)/$TB | до н.э   -  person suhas savkoor    schedule 26.12.2018
comment
Является ли bc единственным способом или у нас есть обходной путь, когда у нас нет bc   -  person suhas savkoor    schedule 26.12.2018
comment
Nvm, это работает с perl. экспортировать TB=$((1000**4)); экспортировать NUM=$(cat test.txt | awk '/разное/ {print $NF}' | sed s/.$//); perl -e '$A=$ENV{NUM}/$ENV{TB};$B=sprintf(%.4f,$A);print $B TB \n'   -  person suhas savkoor    schedule 26.12.2018
comment
Другой путь. экспортировать TB=$((1000**4));python -c print $(cat test.txt | awk '/разное/ {print $NF}' | sed 's/,/.0/g') / $ ТБ   -  person suhas savkoor    schedule 26.12.2018


Ответы (1)


bc не тот инструмент - попробуйте awk:

awk '/miscellaneous/ { print $2 / 1.0e12; }' < test.txt

6.18284

В вашем исходном примере он выполняет деление в bash, которое понимает только целочисленную арифметику.

person wef    schedule 07.01.2019