【发布时间】:2019-11-02 15:36:34
【问题描述】:
我正在编写一个 bash 脚本,利用 jq 过滤给定一些 bash 变量的 JSON 条目,并将每个条目中的一些键值返回到一个制表符分隔的文件中。我认为该命令的前几行还可以,但我认为第 4 行导致了问题。我已经尝试将第 4 行中的每个条目通过管道连接到 tostring 但无济于事。
info=`cat $FILE | jq -r \
' .[] \
| map(select(.host| contains(env.A))) \
| [."ip.A",."ts",."ip.B"] \
| @tsv'`
JSON 示例条目:
{
"ts": "2019-06-19T00:00:00.000000Z",
"ip.A": "0.0.0.0",
"ip.B": "0.0.0.0",
"host": "www.google.com",
}
在这些文件中,文件中的整个文本没有括号。
给定错误:
jq: error (at <stdin>:0): Cannot iterate over string ("2019-06-18...)
我需要以某种特殊方式处理“.ts”吗?
【问题讨论】:
-
仅供参考,出于充分的理由,不推荐使用反引号命令替换。运行起来好多了
info=$(jq -r ...<"$FILE") -
更重要的是,当前输入不是有效的 JSON;它在
}之前有一个,,因此无法完全按照给定的方式进行测试。