【问题标题】:Use jq to replace txt file array string values from dictionary使用 jq 替换字典中的 txt 文件数组字符串值
【发布时间】:2020-02-25 03:20:00
【问题描述】:

我有一本像这样的字典:

{
  "uid": "d6fc3e2b-0001a",
  "name": "ABC Mgmt",
  "type": "host"
}
{
  "uid": "d6fc3e2b-0002a",
  "name": "Server XYZ",
  "type": "group"
}
{
  "uid": "d6fc3e2b-0003a",
  "name": "NTP Primary",
  "type": "host"
}
{
  "uid": "d6fc3e2b-0004a",
  "name": "H-10.10.10.10",
  "type": "host"
}

然后我有一个txt文件:

"d6fc3e2b-0001a"
"d6fc3e2b-0001a","d6fc3e2b-0002a","d6fc3e2b-0003a"
"d6fc3e2b-0004a"

预期输出:

"ABC Mgmt"
"ABC Mgmt","Server XYZ","NTP Primary"
"H-10.10.10.10"

我在使用非 json 格式的数组制作 jq 时遇到了一些麻烦。我尝试了各种我找到的解决方案,但没有一个奏效。我对脚本比较陌生,需要一些帮助。

input=file.txt
while IFS= read -r line
do
{
value=$(jq -r --arg line "$line" \
  'from_entries | .[($line | split(","))[]]' \
  dictionary.json)
echo $name
}
done < "$input"

【问题讨论】:

    标签: arrays json bash dictionary jq


    【解决方案1】:

    在以下解决方案中,使用--slurpfile 命令行选项读取字典文件,并使用inputs 结合-n 命令行选项读取“文本”行。 -r 命令行选项与@csv 过滤器结合使用以产生所需的输出。

    调用

    jq -n -R -r --slurpfile dict stream.json -f program.jq stream.txt
    

    program.jq

    (INDEX($dict[]; .uid) | map_values(.name)) as $d
    | inputs
    | split(",")
    | map(fromjson)
    | map($d[.])
    | @csv
    

    警告

    以上假设 stream.txt 中引用的值本身不包含逗号。

    如果 stream.txt 中引用的值确实包含逗号,那么如果 stream.txt 中每一行给出的值都以 JSON 实体的形式给出,例如作为字符串数组,或作为不带分隔符的 JSON 字符串序列。

    评论中描述的问题的解决方案

    调用

    < original.json jq -r --slurpfile dict stream.json -f program.jq
    

    program.jq

     (INDEX($dict[]; .uid) | map_values(.name)) as $d
     | .source
     | map($d[.])
     | @csv
    

    【讨论】:

    • 原始stream.txt是从以下格式的JSON文件中查询出来的。 { "source" : [ "d6fc3e2b-0001a", "d6fc3e2b-0002a" ] } { "source" : [ "d6fc3e2b-0002a", "d6fc3e2b-0003a", "d6fc3e2b-0004a" ] } 有没有其他方法可以得到直接来自流 JSON 实体的相同结果?
    • 是的,这让事情变得简单多了!
    • 我是这个的初学者。您能提供从 JSON 流中获取结果的解决方案吗?
    • 参见“评论中描述的问题的解决方案”。
    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2022-08-14
    • 1970-01-01
    • 2018-09-11
    • 2015-11-24
    • 2017-07-15
    • 2020-02-15
    相关资源
    最近更新 更多