我想在数字字符串中添加前导/尾随零 - 结果字符串需要包含“01”或“001”而不是“1”。我注意到了项目https://github.com/joelpurra/jq-zeros
,但我已经从包管理器(dnf,fedora)安装了 jq,所以jqnpm
对我的一些要求是不可行的(乍一看),更不用说我对 npm 的恐惧,因为东西sudo npm -g
已经毁了我的系统好几次了。
问题:
- 这些 jq 的包管理器,它们是否正在被主流接受?
- 填充本身——没有这个额外的库怎么办?
我想在数字字符串中添加前导/尾随零 - 结果字符串需要包含“01”或“001”而不是“1”。我注意到了项目https://github.com/joelpurra/jq-zeros
,但我已经从包管理器(dnf,fedora)安装了 jq,所以jqnpm
对我的一些要求是不可行的(乍一看),更不用说我对 npm 的恐惧,因为东西sudo npm -g
已经毁了我的系统好几次了。
问题:
您可以在过滤器的开头定义这些函数或将其添加到~/.jq
文件中,然后使用它来填充数字。
def pad_left($len; $chr):
(tostring | length) as $l
| "\($chr * ([$len - $l, 0] | max) // "")\(.)"
;
def pad_left($len):
pad_left($len; " ")
;
然后用它用三个0
s 填充你的值:
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"
使用以下过滤器实现:(或"042"
使用42
)
tostring | (length | if . >= 3 then "" else "0" * (3 - .) end) as $padding | "\($padding)\(.)"
tostring
转换7
成"7"
""
否则设置为"0" * (3 - length)
. (当一个字符串乘以一个数字时,它会重复很多次,例如"foo" * 3
-> "foofoofoo"
)