在同一行打印多个值
Posted
技术标签:
【中文标题】在同一行打印多个值【英文标题】:Printing multiple values on the same line 【发布时间】:2018-02-18 06:43:36 【问题描述】:我正在尝试解析 JSON 文档并在同一行打印几个值。有没有办法取以下文件:
"fmep":
"foo": 112,
"bar": 234324,
"cat": 21343423
然后吐出来:
112 234324
我可以得到我想要的值,但它们打印在不同的行上:
$ echo ' "fmep": "foo": 112, "bar": 234324, "cat": 21343423 ' | jq '.fmep|.foo,.bar'
112
234324
如果某处有示例说明如何执行此操作,我将不胜感激。
【问题讨论】:
【参考方案1】:在您的示例中,最简单的方法是使用 String Interpolation 和 -r
选项。例如
echo ' "fmep": "foo": 112, "bar": 234324, "cat": 21343423 ' | \
jq -r '.fmep| "\(.foo) \(.bar)"'
生产
112 234324
您可能还需要考虑将值放入数组并使用 @tsv 例如
echo ' "fmep": "foo": 112, "bar": 234324, "cat": 21343423 ' | \
jq -r '.fmep | [.foo, .bar] | @tsv'
产生制表符分隔
112 234324
【讨论】:
这就像一个魅力!看起来 jq "-j" 选项也有效,但字符串插值更具可读性。 也许只有我一个人,但是做 TSV 转换感觉做的很糟糕。使用字符串插值感觉输出数据的自然方式。【参考方案2】:这是使用联合输出 (-j
) 的语法:
jq -j '.fmep | .foo, " ", .bar, "\n"' payload.json
【讨论】:
【参考方案3】:假设我们的 JSON (example.json) 如下所示: “你好世界”, “富”:“酒吧”
为了将几个字段连接到同一行,您可以:
$ jq -j '.hello,.foo' example.json
这将导致
worldbar
想要添加分隔符?假设一个空格
$ jq -j '.hello," ",.foo' example.json
这将导致
world bar
*请确保您使用的是 jq 1.5 或更高版本
【讨论】:
以上是关于在同一行打印多个值的主要内容,如果未能解决你的问题,请参考以下文章