如何用JQ填充数字?



我想从数字到字符串中添加前导/尾随零 — 生成的字符串需要包含"01"或"001"而不是"1"。我注意到项目https://github.com/joelpurra/jq-zeros但我从包管理器(dnf,fedora)安装了jq,所以一些jqnpm的要求对我来说是不可行的(乍一看),更不用说我对npm的恐惧了,因为东西sudo npm -g已经破坏了我的系统好几次了。

问题:

  1. 这些 JQ 的包管理器,它们是否正在被主流接受?
  2. 填充本身 — 没有这个额外的库怎么办?

您可以在过滤器的开头定义这些函数,或者将其添加到~/.jq文件中,然后使用它来填充数字。

def pad_left($len; $chr):
(tostring | length) as $l
| "($chr * ([$len - $l, 0] | max) // "")(.)"
;
def pad_left($len):
pad_left($len; " ")
;

然后使用它用三个0来填充你的值:

pad_left(3; "0")

基于 In jq 中的 jq-esque 定义,如何获取 tonumber 以输出十进制而不是科学记数法:

def lpad(n):
tostring
| if (n > length) then ((n - length) * "0") + . else . end;

至于 jq 模块管理器,jq 的官方开发管道中没有任何内容,但 jqnpm 与 npm 无关,使用起来相当安全,至少如果你不使用 sudo 运行它。

给定此 JSON 文档:

7

您可以使用以下过滤器实现"007":(或使用42"042")

tostring | (length | if . >= 3 then "" else "0" * (3 - .) end) as $padding | "($padding)(.)"
  1. tostring7转换为"7"
  2. 如果数字有 3 位或更多数字,则将填充设置为""否则设置为"0" * (3 - length)(当一个字符串乘以一个数字时,它会重复很多次,例如"foo" * 3->"foofoofoo")
  3. 并将数字附加到末尾

最新更新