繁体   English   中英

Shell jq 正在向 csv 输出中的每一行添加标题,而不仅仅是在顶部一次

[英]Shell jq is adding header to every other line in csv output, not just once at the top

我正在使用这种格式从json中提取密钥:

[
 {
   "k1":{"k2":4},
   "k3":{"k2":6}
 }
]
[
 {
   "k1":{"k2":4},
   "k3":{"k2":6}
 }
]

我正在使用这个命令["a","b"], (.[] | [.k1.k2,.k3.k2]) | @csv ["a","b"], (.[] | [.k1.k2,.k3.k2]) | @csv提取两个键并向 csv 添加两个标题( ab )。 但是这个的输出是每隔一行的一个标题:

"\"a\",\"b\""
"4,6"
"\"a\",\"b\""
"4,6"

你可以在这个jq play中看到这一点。 如何更改过滤器以仅将标题放在第一行?

由于您的 json 中有流,因此您需要inputs<\/code>而不是.[]<\/code>

jq -nr '(["a","b"], (inputs | map(.k1.k2,.k3.k2))) | @csv' input-json

您的输入是 JSON 文档流。 因此,您的过滤器会为每个文档执行一次,包括构建标题。

一种解决方案是使用--slurp<\/code>或-s<\/code>选项将流作为数组读取。 但是,这将需要在您的迭代中更深入一层( .[][]<\/code>而不仅仅是.[]<\/code> ):

jq -s '["a","b"], (.[][] | [.k1.k2,.k3.k2]) | @csv'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM