使用包含以下内容的 JSON 文件:
{"major":a, "minor":b, "hotfix":c}
我试图用来jq
生成以下输出:
a.b.c
我使用过单独的jq
命令,例如jq .major
,我能够单独获取我需要的内容,但是一次完成所有操作,特别是添加点,对我来说被证明是困难的。
谢谢。
答案1
jq 有一个 join 函数正是针对这种情况:
jq '[.major,.minor,.hotfix] | map (tostring) | join(".")'
map
如果值已经是字符串,则可以省略。
答案2
使用jq
一系列命令替换中的命令到变量赋值中,该变量赋值对它们之间的句点进行硬编码:
output="$(jq .major ...)"."$(jq .minor ...)"."$(jq .hotfix ...)"
答案3
jq -j '.major, ".", .minor, ".", .hotfix, "\n"' file
以防万一有人不明白,这就是手册页的内容:
即使像“hello”或 42 这样的文字也是过滤器 - 它们接受输入,但始终生成与输出相同的文字。
....
, 如果两个过滤器用逗号分隔,则输入将被输入到两个过滤器中,并且将有多个输出:首先是左侧表达式产生的所有输出,然后是右侧表达式产生的所有输出。
| map | join
因此,在如此简单的情况下,不需要任何复杂的情况。也许手册页的结构应该更好。
答案4
假设jq
不可用,GNUawk
解决方案:
awk -F':|,|}' '{print $2"."$4"."$6}' file