【问题标题】:How to duplicate input into outputs with jq?如何使用 jq 将输入复制到输出中?
【发布时间】:2020-02-26 19:14:35
【问题描述】:

我正在尝试调整以下 sn-p:

echo '{"a":{"value":"b"}, "c":{"value":"d"}}' \
    | jq -r '. as $in | keys[] | [$in[.].value | tostring + " 1"] | @tsv'
b 1
d 1

输出:

b 1
b 2
d 1
d 2

【问题讨论】:

    标签: unix jq


    【解决方案1】:

    以下改编会产生所需的输出:

    echo '{"a":{"value":"b"}, "c":{"value":"d"}}' |
      jq -r '
        def addindex(start;lessthan): 
          range(start;lessthan) as $i | "\(.) \($i)";
        . as $in
        | keys[]
        | $in[.].value
        | addindex(1;3)'
    

    请注意,keys 在排序后发出键名,而 keys_unsorted 保留排序。

    【讨论】:

    • 可以将. as $in | keys[] | $in[.].value 简化为recurse|scalars。是否建议这样做?至少对于没有父级标量的给定输入?
    • @Inian - 我刚刚修改了给定的答案,因为不清楚真正想要什么,但请注意 Q 使用 keys,而不是 keys_unsorted
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    相关资源
    最近更新 更多