Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 使用jq替换字典中的txt文件数组字符串值_Arrays_Json_Bash_Dictionary_Jq - Fatal编程技术网

Arrays 使用jq替换字典中的txt文件数组字符串值

Arrays 使用jq替换字典中的txt文件数组字符串值,arrays,json,bash,dictionary,jq,Arrays,Json,Bash,Dictionary,Jq,我有一本这样的字典: { "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-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"
input=file.txt
而IFS=读取-r行
做
{
value=$(jq-r--arg行“$line”\
'来自|.[($line | split(“,”)[])”\
(dictionary.json)
echo$name
}
完成<“$input”

在以下解决方案中,使用
--slurpfile
命令行选项读取字典文件,使用
输入和-n命令行选项读取“text”行。-r命令行选项与
@csv
过滤器一起使用,以生成所需的输出

调用 program.jq 警告 以上假设stream.txt中引用的值本身不包含逗号

如果stream.txt中引用的值确实包含逗号,那么如果stream.txt中每一行上的值都作为JSON实体(例如字符串数组)或JSON字符串序列(不带分隔符)提供,则会容易得多

注释中描述的问题的解决方案 调用
原始stream.txt是从JSON文件中以以下格式查询的。{“source”:[“d6fc3e2b-0001a”,“d6fc3e2b-0002a”]}{“source”:[“d6fc3e2b-0002a”,“d6fc3e2b-0003a”,“d6fc3e2b-0004a”]}是否有其他方法直接从流JSON实体获得相同的结果?是的,这使事情变得更简单!我是这方面的初学者。您能否提供从JSON流获取结果的解决方案?请参阅“注释中描述的问题的解决方案”。
jq -n -R -r --slurpfile dict stream.json -f program.jq stream.txt
(INDEX($dict[]; .uid) | map_values(.name)) as $d
| inputs
| split(",")
| map(fromjson)
| map($d[.])
| @csv
< original.json jq -r --slurpfile dict stream.json -f program.jq
 (INDEX($dict[]; .uid) | map_values(.name)) as $d
 | .source
 | map($d[.])
 | @csv