【问题标题】:Floating point division with bc in a single command在单个命令中使用 bc 进行浮点除法
【发布时间】:2018-12-26 01:59:40
【问题描述】:

我正在尝试将字节从命令/文件中的某个匹配转换为 TB。

我得到的命令是:

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

【问题讨论】:

  • 发布test.txt的内容
  • test.txt的内容是什么样的?
  • 用内容编辑了我的帖子
  • 好吧,我做了一点搜索,我可以这样做: echo "scale=1;$(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$ //)/1000.0" | bc 但是 1000**4 不起作用,因为 scale 似乎只用于除法
  • 糟糕的做法似乎是: echo "scale=3;$(cat test.txt | awk '/miscellaneous/ {print $NF}' | sed s/.$//) /1000.0/1000.0/1000.0/1000.0" |公元前

标签: shell bc


【解决方案1】:

bc 是错误的工具 - 试试awk

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

6.18284

在您的原始示例中,它在 bash 中进行除法,它只理解整数算术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-27
    • 1970-01-01
    • 1970-01-01
    • 2017-03-05
    • 2012-05-05
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多