jq和awk用于版本文件提取

jq和awk用于版本文件提取

使用包含以下内容的 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

相关内容