jq如何从文件中读取行并创建有效的JSON?
我需要帮助通过jq创建一个有效的JSON文件,jq从文件中读取行 我有一些text.txt文件:jq如何从文件中读取行并创建有效的JSON?,json,linux,bash,jq,Json,Linux,Bash,Jq,我需要帮助通过jq创建一个有效的JSON文件,jq从文件中读取行 我有一些text.txt文件: rabbit1-test1 rabbit1-test2 rabbit1-test3 还有bash脚本: VHOSTNAME=/ NODENAME=node1 input="test.txt" while IFS= read -r line; do jq -n \ --arg a "$VHOSTNAME" \ --arg b
rabbit1-test1
rabbit1-test2
rabbit1-test3
还有bash脚本:
VHOSTNAME=/
NODENAME=node1
input="test.txt"
while IFS= read -r line; do jq -n \
--arg a "$VHOSTNAME" \
--arg b "$line" \
--arg c "$NODENAME" \
'{"data": [{"{#VHOSTNAME}": $a, "{#QUEUENAME}": $b, "{#NODENAME}": $c}]}' ;done < "$input"
我不明白为什么jq读取文件不正确。
请帮帮我。为什么不使用jq的拆分
jq -Rs --arg a '/' --arg c 'node1' '[ .[:-1] |
split("\n")[] |
{ "{#VHOSTNAME}" : $a ,
"{#QUEUENAME}": . ,
"{#NODENAME}": $c } ] |
{ "data" : . }' sample.txt
输出:
你希望得到什么样的产出?这看起来确实像是有效的JSON片段;你的意思是它们之间需要逗号吗?这看起来确实像是真正有效的JSON,因为你运行了几次jq并得到了几个有效的JSON。有效的JSON是{data:[{{VHOSTNAME}:/,{QUEUENAME}:rabbit1-test1,{NODENAME}:node1},{VHOSTNAME}:/,{QUEUENAME}:rabbit1-test2,{NODENAME}:node1}]}如何从我的文件中为所有行创建一个JSON?但是,当我不是从文件运行jq,而是使用while时,它不起作用。@perfect为什么需要一段时间?因为我需要rabbitMQ队列的脚本。我想通过命令-rabbitmqctl list_队列获取命令jq,所有队列都不使用.txt文件。您仍然不需要一段时间。rabbitmqctl list|u queues | jq-Rs-arg a'/'-arg c'node1'..对不起,我需要使用读取行。在rabbitMQ中,我有1000个队列,我必须读取100个队列块
jq -Rs --arg a '/' --arg c 'node1' '[ .[:-1] |
split("\n")[] |
{ "{#VHOSTNAME}" : $a ,
"{#QUEUENAME}": . ,
"{#NODENAME}": $c } ] |
{ "data" : . }' sample.txt
{
"data": [
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test1",
"{#NODENAME}": "node1"
},
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test2",
"{#NODENAME}": "node1"
},
{
"{#VHOSTNAME}": "/",
"{#QUEUENAME}": "rabbit1-test3",
"{#NODENAME}": "node1"
}
]
}