在同一行打印多个值

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 或更高版本

【讨论】:

以上是关于在同一行打印多个值的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中的同一行上打印多个

AWK Mac OSX如何在同一行打印数组键和数组值

在同一行上有多个等号是啥意思? [复制]

Python print() 函数,在同一行打印

SED在同一行中找到多个路径并将其替换为不同的路径

在同一行声明的多个字段的可访问性