如何从文件中的每一行获取第一个单词到一个变量中,卷曲它并将输出附加到一个新文件

How to get first word from each line in file into a variable, curl it and append the output to a new file

我有一个格式如下的文件:

{"cat":["bat","mat","hat"]}

{"dog":["frog","clog"]}

{"mouse":["house"]}

..等等更多(约 50 多行)这样的行。

我想获取每行中的第一个单词(例如 cat),然后 运行 在 URL 上用那个单词卷曲(例如 curl https://urlHere='"$ {animalVariableHere}") 所以每行的第一个词应该放在 URL 中,其中写着“${animalVariableHere}”。一旦 curl 在 URL 上 运行,我就想得到那个输出(卷曲 URL 在 JSON 中给出一行 - 例如 {"type":"animal ,"info":{"house pet","furry","brown"}}),尤其是“info”部分,放入类似于以下内容的新文件中:

"cat": "house pet","furry","brown"

因此,使用上述 3 条输入线的最终输出将是:

"cat": "house pet","furry","tabby"

"dog": "house pet","furry","golden retriever"

"mouse": "house pet","tail","pygmy"

到目前为止,我已经尝试查看是否可以使用 'awk' 命令获取每行中的第一个单词,但它根本不起作用/我不完全确定如何我正在学习 shell 脚本。但是每写一个词,我就想用管道来表达它,即:

<first word> | curl 'https://urlHere'"${animalVariableHere}" | jq -r '.info' | tee -a outputFile

我也不确定如何将动物变量与信息输出相匹配。任何帮助将不胜感激,谢谢

使用jqkeys_unsorted[0]会给你第一个键,--arg让你从外部导入值。使用 bash,您可以使用 while.

逐行循环
jq -r 'keys_unsorted[0]' input.json | while read -r animalVariableHere
do curl 'https://urlHere'"${animalVariableHere}" \
  | jq --arg id "${animalVariableHere}" -r '@csv "\([$id]): \(.info)"'
done > output.txt

假设 curl 输出有效 JSON,即它看起来更像 {"type":"animal","info":["house pet","furry","brown"]}.

您需要一个可以解析 JSON.

的工具
示例 jq
#!/bin/bash

while IFS='' read -r animal
do
    curl "https://urlHere=$animal" |
    jq --arg a "$animal" '$a + ": " + (.info | join(", "))'
done < <(jq -r 'keys[0]' file.json) > output.json