在 jq 中使用指数幂

mic*_*ote 3 json jq

我得到包含一个字节的 JSON 对象,我正在转换为 TB。通常,我更喜欢这样做的方式是除以 1024 的 4 次方。

我正在使用jq '.value|tonumber|(./(1024*1024*1024*1024))',但我更愿意1024*1024*1024*1024用类似的东西替换 ,1024**4或者1024^4无论如何要这样做jq?还有另一种方式我失踪了吗?

数据很简单,如下所示:

{
  "value": "43165913081459",
  "name": "AvailableStorage"
}
Run Code Online (Sandbox Code Playgroud)

Jef*_*ado 5

不幸的是,只有基本的数学运算可用于数字。但是,您应该可以访问平台上可用的C 数学函数。所以 cstdlib 中的很多东西都应该是公平的,比如pow()函数。

(.value | tonumber) / pow(1024; 4)
Run Code Online (Sandbox Code Playgroud)

否则,除了将其作为参数传递之外,我不知道任何其他方法。

$ jq --argjson div "$((1024**4))" '(.value | tonumber) / $div' input.json
Run Code Online (Sandbox Code Playgroud)